1.6 回应对Java的一些批评
Java 出现在公共视线中已有很长一段时间了,因此,在这些年里受到的批评也相当多。这些批评可以归咎于一些技术缺点,以及第一版过度的市场推广。
不过,有些批评只是技术圈的传言,不是很准确。本节,我们来看一些常见的抱怨,以及它们在最新版 Java 平台中的状况。
1.6.1 过度复杂
人们经常批评 Java 核心语言过度复杂。即便是 Object o = new Object(); 这样简单的语句,也有重复——赋值符号左右两边都出现了类型 Object。批评人士认为这么做完全是多余的,其他语言都不需要重复声明类型,而且很多辅助功能都不用这么做(例如类型推导)。
这样的说法我不认同。从一开始,Java 的设计目标就是易于阅读(读代码的次数比写代码多很多),许多程序员,尤其是新手,都觉得额外的类型信息有助于阅读代码。
Java 广泛用于企业环境,开发团队往往和运维团队不同。这些额外的信息一般会在处理停机,或者需要维护和修订早就投身其他事务的开发者编写的代码时提供重大帮助。
在最近几个 Java 版本中(7 和后面的版本),语言的设计者已经在尝试回应这些观点,他们寻找可以简化句法复杂度的地方,也更充分地利用类型信息。例如:
// 文件辅助方法byte[] contents =Files.readAllBytes(Paths.get("/home/ben/myFile.bin"));// 使用菱形句法表示重复的类型信息List<String> l = new ArrayList<>();// lambda表达式,简化了RunnableExecutorService threadPool = Executors.newScheduledThreadPool(2);threadPool.submit(() -> { System.out.println("On Threadpool"); });
然而,Java 的总体原则是非常缓慢且谨慎地修改语言,所以这些变化可能无法完全让批评者满意。
1.6.2 变化慢
Java 第一版发布至今已经超过 15 年了,而且在那个时候也没经过完整修订。在这段时间里,很多其他语言(例如微软的 C#)都发布了不向后兼容的版本,而 Java 没这么做,因此受到了部分开发者的批评。
而且,最近几年,Java 语言因为没有及时吸收其他语言中常见的功能而受到严厉批评。
Sun(现在是甲骨文)在语言设计上采取了保守方式,是为了尽量避免把成本和不合理功能的外部效应强加在大量的用户群体身上。很多使用 Java 的公司都为这一技术注入了重资,语言设计者要认真负责,不能影响现有的用户和安装群体。
每一个新语言功能都要审慎考虑,不只是新功能本身,还要考虑它会如何影响语言现有的功能。有时,新功能的影响会超过目及之处,而 Java 的使用范围又如此广泛,因此可能有很多地方会产生意料之外的影响。
功能发布后,如果有问题,几乎无法将其删除。Java 有一些不合理的功能(例如终结机制),在不影响安装群体的情况下,根本无法安全地删除。语言设计者认为,在语言演进的过程中必须极为小心。
话虽如此,但 Java 8 引入的新语言功能向前迈出了一大步,回应了最常见的功能缺失抱怨,应该能为开发者提供他们一直诉求的语言特性。
1.6.3 性能问题
现在仍然有人批评 Java 平台的速度慢,而且所有批评都集中在“平台”上,这或许是最不合理的批评了。
Java 1.3 引入了 HotSpot 虚拟机和 JIT 编译器,而且在随后的 15 年里,一直在革新和改进虚拟机及其性能。现在,Java 平台的速度异常快,经常会在流行的框架性能评测中取胜,甚至打败了编译成本地机器码的 C 和 C++。
针对这方面的批评大都是因为陈旧的记忆,因为以前的某段时间 Java 很慢。Java 使用的大型且不规则延展的架构方式可能也加深了人们对性能低下的印象。
然而,事实上,任何大型架构都需要评测、分析和性能调校,才能得到最好的表现,Java 也不例外。
Java 平台的核心(Java 语言和 JVM)不仅现在是,以后也仍将是开发者可用的速度最快的通用环境。
1.6.4 不安全
2013 年,Java 平台出现了几个安全漏洞,导致 Java 8 的发布日期延后了。其实,在此之前就有人批评 Java 的安全漏洞数量众多。
在这些漏洞中,有很多都涉及 Java 系统的桌面和 GUI 组件,不会影响使用 Java 编写的网站或其他服务器端代码。
所有编程平台都会时不时地出现安全问题,而且很多其他语言的安全漏洞不比 Java 少,只是少有人知罢了。
1.6.5 太注重企业
Java 平台在公司和企业的开发者中使用广泛,因此觉得 Java 太注重企业一点也不奇怪。人们认为 Java 缺少面向社区的语言所具有的自由风格。
其实,Java 一直都是,而且以后仍将是社区和免费或开源软件开发所广泛使用的语言。在 GitHub 和其他项目托管网站中,Java 是最受欢迎的。
而且,使用范围最广的 Java 语言是通过 OpenJDK 实现的。而 OpenJDK 本身就是开源项目,其社区充满活力,一直在不断增长。
