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. 初始化块

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

  • 相关阅读:
    ActiveX版本升级步骤
    转 .NET 2.0中串口通讯类SerialPort用法整理
    解决“请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析”
    Padding is invalid and cannot be removed 解决方法
    【转】Umbraco 4 安装 中文教程
    在windows 2008 装oracle 10g
    使用Synctoy进行数据同步
    windows server 2008 多用户远程登录设置
    你好,博客园!
    使Ruby在OS X的控制台输出中使用颜色
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/13122489.html
Copyright © 2011-2022 走看看