1.2.1 Java语言的特点

1. 简单

Java的语法与C语言很接近,使得大多数开发者能够快速学习和使用Java语言。另一方面,Java舍弃了C++中很少使用的、晦涩且容易出错的特性,如运算符重载、多重继承等。特别地,Java还从语法层面取消了指针,同时提供了自动内存回收机制,使开发者不必频繁编写代码显式地释放内存。

2. 完全面向对象

在Java世界中,万事万物皆对象[1]。与C++不同,Java对面向对象的要求十分严格,任何变量和方法都只能包含于某个类的内部,这使得程序的结构更为清晰。Java提供了封装、继承和多态等基本的面向对象特性,并且只支持单继承。为了能表达多重继承的语义,同时避免引入如C++的多重继承所带来的复杂性,Java使用了接口的概念——类可以继承另一个类,同时也能实现若干个接口。此外,Java提供了全面的动态绑定机制,而不像C++只能对虚函数使用动态绑定。总之,Java是一种完全的面向对象的编程语言。

3. 分布式

作为诞生并发展于互联网兴起时代的编程语言,Java提供了丰富的用于编写网络应用程序的API,这在Java EE中体现的尤为明显。Java提供的RMI(Remote Method Invocation,远程方法调用)机制甚至允许执行网络中另一台机器上的代码,这使得一个Java程序可以被分布到网络中若干不同的物理机器上,并形成一个逻辑上的整体。更为重要的是,这种分布机制所涉及的细节对于程序的编写者和使用者来说几乎是完全透明的——跨机器的通信就如同访问本地资源一样简单。

4. 安全

Java程序经常需要被部署在开放的网络环境中,为此,Java从诞生之初就非常重视安全性。例如,在编译阶段进行语法、语义和类型安全检查,类被装载到Java虚拟机时进行字节码校验等。对于通过网络下载的类,Java也提供了多层安全机制以防止程序被恶意代码侵害,这些机制包括代码行为检查、分配不同的命名空间以防止本地同名类被替换等。此外,Java还允许用户自定义安全管理器,以便灵活地控制访问权限。

5. 健壮

Java的设计目标之一是要协助开发人员编写出各方面可靠的程序。Java具有的强类型检查、异常捕获及处理、资源自动释放以及垃圾自动回收等机制,为程序的健壮性提供了重要保证。此外,前述的安全检查机制也使得Java程序更具健壮性。

6. 平台中立与可移植

Java在发布之初便宣称“Write Once, Run Anywhere”,即每个Java程序可以不加任何修改而随处运行。然而,互联网是由各种异质平台组成的,这种异质既包括硬件(如CPU),也包括软件(如操作系统)。为使Java程序能够运行在网络中的任何平台,Java源文件被编译为平台中立(即无关)的字节码文件,后者可以在所有实现了相应规范的Java平台上运行。

7. 解释型

如前所述,Java源文件被编译为平台中立的字节码,而后者是CPU无法直接理解的,因此需要由平台上的Java虚拟机将这些字节码“解释”成CPU能够理解的指令并交由CPU执行。平台中立与可移植性决定了Java是一种解释型的编程语言[2]

8. 高性能

由于存在解释的过程,故从理论上来说,Java程序的执行性能是低于传统的编译型语言(如C、C++)的[3]。在Java诞生之初,事实上也的确如此。但与纯解释型的脚本语言(如VBScript、JavaScript、Python等)相比,Java的性能却要高得多。随着近年来JIT(Just In Time,即时的)编译以及HotSpot(一种新的Java虚拟机规范)等字节码优化技术的出现,Java程序的性能已非常接近于C++,对于绝大多数应用,这种性能差距是完全可以接受的。从另一个角度看,Java以极小的性能损失为代价所换取的平台中立与可移植性却是非常有价值的。

9. 动态特性

Java是可扩展的、具有动态特性的面向对象编程语言,用Java编写的程序能够较好适应不断变化的业务需求。除了接口和自动类型推断所提供的动态特性外,Java语言的动态性更多体现在反射机制上。反射机制允许程序在运行而非编译阶段动态地访问类和对象的元数据(用来描述数据的数据),这使得Java语言比那些直接被编译成本地代码的语言更具动态性。

说明:尽管Java提供了较为丰富的动态特性,但相较于JavaScript、Ruby、Python等能在运行时修改变量类型(甚至程序结构)的动态编程语言而言,Java仍属于静态编程语言的范畴。

10. 开源

与其他众多技术不同,Java从诞生之初便坚持开源(Open Source,开放源代码)策略。任何个人和组织都可以免费下载JDK核心类库的源代码。也正因如此,任何Java开发者都能扩展官方代码,从而创建出适合自己需求的类库[4]。此外,开发者[5]还能以提交JSR(Java Specification Request,Java规范请求)的方式,建议官方为JDK的下一发布版本增添某些新特性和服务。总而言之,开源使得Java语言的功能和特性日趋丰富,同时也使得开发Java程序越来越方便。

基于上述特点,Java已成为网络环境下软件开发的首选技术之一。从消费类电子产品到超级计算机,从智能移动终端应用到企业级分布式计算,Java无处不在。