zoukankan      html  css  js  c++  java
  • 吐槽Java

    学Java也有段时间了,从Python切换到Java还是有些不适应,会很自然的对两者进行对比。Java是静态语言,相比动态语言,它有利有弊。亲近了机器语言,远离了人类语言。  

    利:更适合机器的语言,因为编译成了字节码,所以运行速度比动态语言快

    弊:对人类来说,可读性远不如动态语言。语法太多,复杂。相对Python,语法复杂度增加了不止一倍

    从机器语言到人类语言,中间就是编程语言,一个编程语言越接近机器语言,在机器上的执行速度越快,但可读性越差;反之,越接近人类语言,在机器上的执行速度越慢,但可读性越好。

    世界上没有完美的东西,Java也不例外,从开发出来到现在,Java一直在完善自己。但还是有一些地方不尽如人意。

    我十分喜欢Apple的产品设计理念:精简。但Java的设计,跟精简还有相当的距离。跟Python相比,差距也很明显。当然,这跟Java是编译型语言以及直接从C++进化过来有关系。

    1. 不支持override静态字段和静态方法

    override静态字段,我感觉这个需求非常常见。在父类中定义static字段和static方法,子类调用父类的static方法,但我不想使用父类static字段的默认值,而是想在子类中重新赋值,同时,又不想影响父类的static字段。但Java就是不支持,这点太坑了。

    后来,我在Quora(连这个网站也墙,垃圾)上找到了答案:Why can't static methods be overridden? ,里面提到,实例方法的查找是运行时确定的,而类方法和类变量的查找是编译时确定的,所以不能override。像Smalltalk和Objective-C的类方法的查找是运行时确定的,可以override

    2. 不伦不类的接口

    接口其实是抽象类的简化。Java设计者不想用C++的多继承,所以用的单继承,但同时增加了接口概念去实现与多继承相同的功能。感觉Java设计者在当初增加接口概念时欠考虑,Java8又往接口里加default方法,搞的接口与抽象类之间只剩下一层内裤了:实例字段。既然这样,当初就不应该增加接口这个东西,因为每增加一个概念,都增加了复杂度。Java设计者显然不懂苹果公司的理念:精简。Python用的多继承,没啥不好。

    3. 没有函数概念

    Java8增加lambda,开始支持匿名函数。但是仍然不支持非匿名函数。如果用户想定义一个函数,只能用lambda或者用接口实现,还对这类接口美其名曰:函数接口。但其实是非常糟糕的设计,给函数套了个没用的套子。如果乔布斯在世,非痛骂这个设计者不可。

     4. 初始化块

    多余的设计,一点用都没有

  • 相关阅读:
    Nginx访问日志、 Nginx日志切割、静态文件不记录日志和过期时间
    nginx的安装 、Nginx默认虚拟主机、nginx用户认证、nginx 域名重定向
    lnmp架构、mysql的安装、php的安装、nginx相关
    限定某个目录禁止解析php 、限制user_agent 、php的配制文件、PHP的动态扩展模块
    配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
    指令的概述
    点击事件交互示例
    日期过滤器示例
    in和not in注意事项
    mysql里的case用法详解
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/13122489.html
Copyright © 2011-2022 走看看