作者 | Nishant Aanjaney Jalan
策划 | 云昭
51CTO读者成长计划社群招募,咨询小助手(微信号:CTOjishuzhan)
Java已经存在了将近30年。从1997年开始,有30亿台设备运行Java。现在Kotlin、Scala等更新的JVM语言流行了,Java是不是已经过时了?人们开始厌弃Java了吗?
我相信有很多人喜欢Java。很自豪本人也其中的一员。当像Kotlin和Scala这样的语言出现时,我发现这些语言更好。当然,这绝不意味我讨厌Java。
一、Java过去到底有多受欢迎?
Java的受欢迎程度如此之高,以至于ECMAScript被昵称为JavaScript,因为它在我们心中取代Web Assembly的速度和Java一样快。
可以列举几个例子来说明Java是一种受欢迎的语言。
二、Java为什么受欢迎?
1.平台无关
因为Java运行在Java虚拟机(JVM),相同的代码可以毫无困难地在多个平台上运行。另一方面,c有多个编译器为不同的isa编写汇编代码。如果一个C程序可以在机器A上运行,它不能保证在机器b上运行。
类似于C和C++的语法Java与C和C++共享一个相似的语法,这使得程序员不用重新学习所有的东西就可以切换到Java。
2.没有更多的指针
Java消除了指针的外部处理。这意味着你不再有那些烦人的缺点了。Java使用了指针(当然),但是代码是以各种方式抽象的。
3.自动垃圾收集器
在C和C++中,当对象不再被使用时,程序员必须手动释放内存(这需要大量的内存泄漏)。在Java中,基于程序员应该知道的某些规则,垃圾收集器会自动为您释放未使用的分配内存。
4.面向对象的编程
Haskell是一种纯粹的函数式语言。它严重依赖于数学技能,需要练习才能掌握。Java是一种纯粹面向对象的语言,与现实生活联系紧密。这种转变平滑了学习曲线(当然这在以后会变得非常困难)。
5.清晰的结构
Java的语法非常结构化。类中的一切都有助于理解相关的信息和功能。从第一句“你好,世界!”,您需要对类语法有一个基本的了解。在Java的帮助下,重要的原则、设计模式和编程范例可以很容易地得到解释。
回顾以上原因,没有理由讨厌Java。Java曾经是语言在2000年代。许多政府软件和银行都使用Java,其中一些现在仍在使用。
三、现在发生了什么?
不管人们怎么说,现在Java正在衰落。虽然Java仍然被维护着,全球仍然有许多Java开发者,但是作为编程语言,过去的辉煌现在已经一去不复返了。
1.无效
作为“空引用”的创造者,东尼·霍尔在一次采访中说,“这是一个十亿美元的错误”,因为它会导致意想不到的行为和程序崩溃。Java在核心库中采用了null,这使得它类似于在c中处理segfault错误。
2.刚性
在用Java编程一段时间后,您会注意到您多次编写了相同的代码。随着技术的进步,Java中的样板代码激增,从而使其变得庞大。
3.没有函数式语言支持
正如我前面所说,Java是纯面向对象的。然而,程序员需要命令式和声明式语言都包含的特性。
4.继承抽象中的一个缺陷
Java中有四种访问说明符:公共的、受保护的、私有的和受包保护的/默认的/友好的。没有办法允许对子类的访问并限制对包中其他类的访问。
四、Java历史上的重要改进
1.Java 8的改进
Java维护者没有忽视开发者的请求。
(1)功能支持—他们引入了流API的功能接口。然而,由于向后兼容,实现它仍然很笨拙。
(2)Optionalclass— Optional是无效问题的一种解决方法。尽管如此,包括Optional并没有消除null的可能性,因为它在Java的核心库中根深蒂固。
2.Java 12改进
表达式中引入Switch语句,减少了条件控制流中的一些样板。
3.Java 16改进
Java中引入了record,它在编写POJOs(普通的旧Java对象)时,删除了大部分样板文件。
五、Kotlin和Scala的到来
就像Java是对C++的改进一样,Kotlin是对Java的改进。 Kotlin的优势如下:
1.大大减少了样板文件。
2.根深蒂固的Null安全。
3.引入了字符串模板(受Python/PHP的启发)。
4.介绍sealed class(受Rust/Haskell启发)。
5.多范例语言(改进的OOP和融合性的功能)。
6.运算符重载(如C和Python)。
7.引入了data class(Java中的record)。
8.其他杂项功能,如扩展和内联函数,以及协程。
因为我从未使用Scala编程,所以我不在文中讨论它的好处。当然,Java也在进化。
六、结论
仅仅因为更好的东西出现了,并不意味着我们厌弃了Java。
Java是明星编程语言,我们不能忽视它是如何帮助改变今天的编程语言的。Java的建立是为了解决一些问题,但作为副作用,它也产生了新的问题。在我看来,10年后,人们会开始抱怨今天的语言,一种新的语言将被创造出来解决这些问题。
如果没有Java,现代语言不会像今天这样强大。正如C++之父所言,世界上只有两种语言:人们抱怨的语言和没人使用的语言。