1.2 Java语言的特点
Java诞生并发展于互联网兴起的时代,它继承和舍弃了当时一些主流编程语言各自的优缺点,这也注定了其具有区别于其他编程语言的特点,具体表现在以下方面。
1.简单
Java语言的语法与C语言很接近,使得大多数编程者能够快速学习和使用Java。另一方面,Java舍弃了C++中很少使用的、晦涩且容易出错的特性,如运算符重载、多重继承等。特别地,Java还从语法层面取消了指针,同时提供了自动内存回收机制,使得编程者不必频繁编写代码显式地释放内存。
2.完全面向对象
在Java世界中,万事万物皆对象。与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.平台中立与可移植
Sun在Java发布之初便宣称“Write Once, Run Anywhere”,即每个Java程序可以不加任何修改而随处运行。然而,互联网是由各种异质平台组成的,这种异质既包括硬件(如CPU)也包括软件(如操作系统)。为使Java程序能够运行在网络中的任何平台,Java源文件被编译为平台中立(即无关)的字节码文件,后者可以在所有实现了相应规范的Java平台上运行。因此,Java程序的编写者无须考虑程序将来会被放到何种软硬件平台上运行,真正做到了二进制级别的可移植性。
7.解释型
如前所述,Java源文件被编译为平台中立的字节码,后者是CPU无法直接理解的,因此需要由平台上的Java虚拟机将这些字节码“解释”成CPU能够理解的指令并交由CPU执行。平台中立与可移植性决定了Java是一种解释型的编程语言。
8.高性能
由于存在解释的过程,故从理论上来说,Java程序的执行性能是低于传统的编译型语言(如C++)的,在Java诞生之初,事实上也的确如此。但与同为解释型的脚本语言(如Perl、VBScript、JavaScript等)相比,Java的性能却要高得多。近年来,随着JIT(Just In Time,即时的)编译及HotSpot(一种新的Java虚拟机规范)等字节码优化技术的出现,Java程序的性能已非常接近于C++,对于绝大多数应用,这种性能差距是完全可以接受的。从另一个角度看,Java以极小的性能损失为代价换取的平台中立与可移植性却是非常有价值的。
9.多线程
多线程使得一个程序(进程)可以同时执行多个子任务,从而提高系统资源利用率或带来更好的交互体验。与C++借助操作系统或第三方类库来实现多线程的方式不同,Java在语言级就支持多线程,因此Java的多线程比C++更为健壮。
10.动态
Java从一开始就被设计成动态的、可扩展的面向对象编程语言,使得用Java编写的程序能够较好适应不断变化的运行环境和业务需求。除了接口所提供的动态特性外,Java语言的动态性更多体现在反射机制上。反射机制允许程序在运行阶段动态访问类和对象的元数据(即描述数据的数据),这使得Java语言比那些直接被编译成本地代码的语言更具动态性。
11.开放
与其他众多技术不同,Java从诞生之初便坚持开放路线,任何个人和组织都可以免费下载JDK核心类库的源代码,也正因如此,任何Java开发者都能扩展官方代码从而创建出适合自己需求的类库。此外,开发者还能以提交JSR(Java Specification Request, Java规范请求)的方式,建议官方为JDK的下一发布版本增添某些新特性和服务。总而言之,开放性使得Java语言的功能和特性日趋丰富,同时也使得开发Java程序越来越方便。
基于上述特点,Java已成为网络环境下软件开发的首选技术之一。从消费类电子产品到超级计算机,从智能移动终端应用到企业级分布式计算,Java无处不在。