开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【JVM原理探索】你最应该阅读的JMM学习指南 | Java开发实战
【JVM原理探索】你最应该阅读的JMM学习指南 | Java开发实战
0 0
java方法调用数组做参数,详细的Java学习指南
java方法调用数组做参数,详细的Java学习指南
0 0
来了,来了!你们要的写给 Java 程序员看的算法学习指南! | 算法必看系列二十
这篇文章我会推荐一些关于算法学习的书籍以及资源。希望对大家学习算法有帮助!
0 0
《Java和Android开发学习指南(第2版)》—— 导读
本书是针对那些想要学习Java语言,特别是想要进行Android应用程序开发的人编写的。本书包含两个部分,第1部分主要介绍Java,第2部分介绍如何有效地构建Android应用程序。
929 0
《Java和Android开发学习指南(第2版)》—— 2.10 本章小结
本章介绍了Java语言的基础知识,包括继续学习高级内容之前应该掌握的基本概念和话题。讨论的话题包括字符集、变量、基本数据类型、字面值、操作符、操作符优先级以及注释。
839 0
《Java和Android开发学习指南(第2版)》—— 2.9 注释
在整个代码中编写注释,充分地说明一个类提供了什么函数,一个方法做些什么,一个字段包含什么等,这是一种好的做法。在Java中,有两种类型的注释,它们都和C和C++中的注释有类似的语法。
940 0
《Java和Android开发学习指南(第2版)》—— 2.8 操作符
计算机程序是实现某一功能的操作汇集在一起的一个集合。有很多种类型的操作,包括加法、减法、乘法、除法和位移。在本小节中,我们将学习各种Java操作。
717 0
《Java和Android开发学习指南(第2版)》—— 2.7 基本类型转换
在处理不同的数据类型的时候,我们常常需要进行转换。例如,将一个变量的值赋给另一个变量,就涉及转换。如果两个变量具有相同的类型,赋值总是会成功。从一种类型到相同类型的转换,叫作等同转换(identity conversion)。
880 0
《Java和Android开发学习指南(第2版)》—— 2.6 字面值
很多时候,我们需要给程序中的变量赋值,例如,将数字2赋给一个int型变量,或者将字符“c”赋给一个char型变量。为此,需要按照Java编译器能够理解的格式来书写值的表示形式。表示一个值的源代码叫作字面值。
845 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA 应用排查全景图
立即下载
Java工程师必读手册
立即下载
Java应用提速(速度与激情)
立即下载