《Java学习指南》—— 1.3 Java与其他语言的比较

简介: Java虽是一种新语言,但是在其特性选择中,还汲取了其他语言多年以来的编程经验。花点时间来在较高的层面比较Java和其他语言是值得的,不管你是具有其他编程经验,还是需要搞清楚状况的新手,这都是有好处的。

本节书摘来异步社区《Java学习指南》一书中的第1章,第1.3节,作者:【美】Patrick Niemeyer , Daniel Leuck,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 Java与其他语言的比较

Java虽是一种新语言,但是在其特性选择中,还汲取了其他语言多年以来的编程经验。花点时间来在较高的层面比较Java和其他语言是值得的,不管你是具有其他编程经验,还是需要搞清楚状况的新手,这都是有好处的。在本书中,我们不要求你具备任何特定编程语言的知识,并且当我们通过比较而提及其他语言的时候,我们希望这些说明是简单而直白的。如今一种通用语言至少要支持以下3点:可移植性、速度和安全性。图1-2显示了Java与其他几种流行语言的比较情况。

555967af106a7628e804017c69c3e7465c407902

“Java非常类似于C或C++”,对此你可能早有耳闻,但除表层以外,事实却并非如此。你第一次看到Java代码时,将会看到其基本语法确实与C或C++ 很相近。但是它们的相似性也仅限于此。Java绝对不是C的一个换代产品,也不是C++的下一版本。如果对语言特性加以比较,可以看出Java与Smalltalk和Lisp等语言有着更多的共同之处。实际上,Java的实现与本地C相比真可谓有着天壤之别。

如果你熟悉当前的语言的发展情况,你将会注意到,C#这种流行的语言没有在比较之中。C#在很大程度上是Microsoft对Java的应战,应该承认C#有很多优点超越了Java。这两种平台具有一些共同的设计目标和方法(例如,使用虚拟机、字节码和沙箱等),而在其速度和安全特性方面也没有太大的差别。理论上讲,C#和Java一样可移植,但迄今为止支持它的平台要比Java少很多。和Java一样,C#在很大程度上也借鉴了C的语法,但是,实际上它更接近于动态语言。大多数Java开发者发现很容易学习C#,反之亦然。从其中一种语言迁移到另一种语言的大部分时间,都花在了学习标准库上。

不过,对于这些语言之间的表面级的相似性还是有必要加以说明。Java大量借用了C和C++ 的语法,因此你会看到许多熟悉的语言构造,其中包括反复出现的大括号和分号。Java还采纳了C的观点,即一个好的语言应当是简洁的;换句话说,它应当足够小而且相当规范,从而使程序员可以立即掌握该语言的所有功能。正如C利用库来加以扩展,也可以将Java类包添加到其核心语言组件中。

C已广获成功,这是因为它提供了一个特性相当丰富的编程环境,不仅性能很高,而且还有一定的可移植性。Java也尝试在功能、速度和可移植性三者之间取得平衡,但是它所采用的方式却截然不同。C是以功能换取可移植性;而Java则是靠牺牲速度来得到可移植性。另外,Java还解决了安全性问题,对此C则束手无策(尽管在现代系统中,很多安全问题都在操作系统和硬件中解决了)。

在早期阶段,即JIT和自适应编译尚未提出以前,Java相对于编译型语言要慢得多,并且批评者经常挂在嘴边的说法是,Java的速度永远也赶不上静态编译语言。但是正如前一节所述,目前对于同样的任务,Java与C或C++ 的性能完全可以比拟,并且那些批评也渐渐销声匿迹。ID软件的开源视频游戏引擎Quake2已经移植到Java平台上。如果Java对于第一人称战斗视频游戏来说已经够快了,那么,对于商业应用来说,它肯定也够快了。

诸如Perl、Python和Ruby这样的脚本语言越来越流行。尽管脚本语言对于安全的网络化应用并非完全不适合,但是大多数脚本语言都不是为严格的大型编程而设计的。脚本语言的诱人之处在于它们的动态性;对于快速开发,脚本语言则是功能非常强大的工具。

有一些脚本语言(如Perl)还提供了很强大的工具来完成文本处理任务,对此更通用的语言往往无法胜任。脚本语言也具有很好的可移植性,即使是在源代码的层级。

不过,不要将Java与JavaScript混为一谈!JavaScript是由Netscape等公司合作开发的一种基于对象的脚本语言。对于动态、交互式的Web的应用来说,它充当浏览器的本地语言。JavaScript的名字源自于它与Java的结合以及类似性,但仅此而已。尽管在浏览器之外也有了JavaScript编写的应用程序,但它还没有真正成为一种通用性的脚本语言。有关JavaScript的更多信息可以参阅David Flanagan所著的《JavaScript: The Definitive Guide》(由O'Reilly出版)。

不过脚本语言也存在一个问题,即它们对程序结构和数据类型有些过于随意。大多数脚本语言都不是面向对象的(Perl的最新版本和Python例外)。其类型系统也太过简化,而且无法提供复杂的变量和函数的作用域控制。这些特点使之无法适用于构建大型、模块化的应用。脚本语言的另一个问题在于速度,这些高级语言具有完全的解释性,这就使得其速度相当慢。

个别脚本语言的支持者可能对这些一概而论持不同意见,当然有些情况下他们是对的。脚本语言近年来也在改进,尤其是JavaScript,在其性能方面投入了大量的研究。但是,最根本的考虑是不可否认的:脚本语言是作为系统编程语言的一种松散的、缺乏结构的替代而产生的,由于众多的原因,对于较大的或复杂的项目来说,一般不是理想的选择,至少目前还不是。

Java提供了脚本语言的一个基本优点,即高度动态化,另外还增加了低级语言的一些额外优势。Java有一个强大的正则表达式API(Regular Expression API),从而使Java在处理文本方面可以与Perl媲美,此外,对集合的流编码、可变参数列表、方法的静态导入以及其他的语法糖等语言特性,也使得Java更为精炼。

一方面利用面向对象组件的递增开发,另一方面再结合Java的简单性,这样就可以快速地开发应用,并且能够很容易地加以调整。许多用户发现,只要严格地基于语言特性,较之于使用C或C++ 来说,用Java开发要快很多1。Java还为诸如构建GUI和完成网络通信等公共任务提供了一个大型核心类库。另外基于这些特性,Java还具有可伸缩性和软件工程特性,而这些特性本是更为静态的语言的优点。Java还提供了一个安全的结构,在此之上可以构建更高级的框架(甚至其他语言)。

如前所述,Java在设计上与Smalltalk和Lisp等语言存在相似性。不过,这些语言目前大多用作研究工具,而不是用来开发大型系统。其中一个原因是,它们从未开发针对操作系统服务的一种标准可移植绑定,如C标准类库或Java核心类等。Smalltalk编译为一种已解释字节码格式,而且可以动态地编译为本地码,这一点与Java相同。但是Java在设计上有所改进,即使用了一个字节码校验器以确保已编译Java代码的正确性。此校验器使Java的性能优于Smalltalk,因为Java代码需要更少的运行时检查。Java的字节码校验器还有助于解决安全性问题,对此Smalltalk则未有建树。

在本章余下的部分,我们将对Java语言做一个全面的概述。在此将说明哪些是Java的新内容,哪些则是借用的原有内容,并解释为什么存在这些差别。

fe3ba55b938c56469c3095a143b4483d6c05783c
相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
73 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
3月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
16天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
34 4
|
1月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
48 3
|
1月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
59 4
|
1月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
62 2
|
1月前
|
Java 数据安全/隐私保护 C++
Java语言关键字
Java语言关键字
24 2
|
1月前
|
分布式计算 安全 Java
Java语言的特点?
Java语言的特点?
|
4月前
|
算法 Java
Java语言实现最短路径算法(Shortest Path)
Java语言实现最短路径算法(Shortest Path)
61 3
|
3月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
下一篇
无影云桌面