《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
相关文章
|
28天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
5天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
38 10
|
10天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
21天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
29天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
29天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
29天前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
1月前
|
安全 IDE Java
Java语言基础
Java语言基础
14 0
|
1月前
|
Oracle 安全 Java
Java语言概述
Java语言概述
10 0