1.4 Java语言的特点
Java语言的语法比较简单,对于初学者来说是一门极容易入门的语言。Java语言在设计上有着绝对的优势,开发人员可以尽快从语言本身的复杂性中解脱出来,将更多的精力投入软件自身的业务功能中。Java语言最重要的一点是符合工程学的需求,由于现代软件都是协同开发,因此具有代码可维护性、编译时检查、较为高效的运行效率、跨平台能力、丰富而强大的开发、测试、项目管理工具配合等特性都使Java成了企业应用软件开发的首选,也得到很多互联网公司的青睐。Java语言的成功更取决于它本身的语言特点。下面将会对Java语言的特点进行详细的介绍。
1.平台无关性
Java语言的一个显著特点就是平台无关性。首先我们了解下什么是平台。例如,个人计算机用的Windows系统、手机用的Android系统、大型网站用的Linux系统,这些系统都可以理解为平台。平台无关性代表的就是同一个Java程序可以在不同的平台上运行,即一次编写就可以处处运行(Write Once,Run Anywhere)。这是因为Java程序不是直接运行在操作系统上的,而是运行在Java虚拟机中的,具体原理在1.5节将有讲解。
2.面向对象性
Java语言是一门面向对象的语言。面向对象的世界观认为世界是由各种各样具有自己的运动规律和内部状态的对象组成的,不同对象之间的相互作用和通信构成了完整的现实世界。面向对象的编程就是模拟现实世界,把现实世界中的事物类别和实体对象抽象成Java中的类和对象。例如,人有姓名、年龄、性别等属性,也有跑步、骑自行车、吃饭等行为。如果要编写一个关于人的系统,可以把人的属性和行为看作一个整体并封装为一个Java类,而具体的某个人对应Java类的一个实例对象,这就是面向对象开发的概念。相较于面向过程,面向对象更易维护、复用、扩展,可以设计出低耦合的系统,使系统更加灵活。面向对象的具体讲解见本书第7章。
3.支持分布式
Java语言的创始人团队很敏锐地嗅到了时代的发展趋势之一就是网络化,迅速将Java语言改造成网络编程语言,才让Java语言大放异彩。Java语言支持Internet应用的开发,java.net包提供了相应的类库用于网络应用编程。Java语言的远程方法调用(RMI)机制也是开发分布式应用的重要手段。
4.支持多线程
现在的程序都要求能实现多线程,一方面是为了能更好地利用CPU资源,另一方面是程序应该体现“多角色”,如“生产者消费者模型”。
JVM被设计成采用轻量级进程(Light Weight Process,LWP)实现与操作系统的内核线程形成相互对应的映射关系。使用JVM就可以实现Java内部的多线程,并提供了相应的语法来进行编码。其实调用Java的多线程就是调用内核线程来执行的,所以说Java天生是支持多线程的语言。
java.lang包提供了Thread线程类来支持多线程编程,Java的线程支持包括一组同步原语。这组同步原语是基于监督程序和条件变量风范,由C.A.R.Hoare开发并广泛使用的同步化方案,如synchronized、volatile等关键字的使用。从JDK 1.5开始又增加了java.util.concurrent包,该包提供了大量高级工具,可以帮助开发人员编写高效、易维护、结构清晰的Java多线程程序。
Java开发团队正在设计新型轻量级用户线程——fibers,其轻量化程度高于内核提供的线程,从而可以更高效地使用CPU等系统资源。
5.健壮性
Java语言原来是用于编写消费类家用电子产品软件的语言,所以它被设计成可以编写高可靠和稳健的程序。Java会检查程序在编译、运行时的错误,并消除错误。
Java被设计为强类型语言,类型检查能帮助用户检查出许多在开发早期出现的错误。Java要求以显式的方法声明,它不支持C语言风格的隐式声明。这些严格的要求可以保证编译程序能捕捉调用错误。
异常处理是Java可以使得程序更稳健的一个重要途径。异常是某种类似于错误的异常条件出现的信号。使用try/catch语句,程序员可以处理代码中错误的逻辑,这就减少了错误处理和代码恢复的工作量。
6.安全性
Java通常被用在网络环境中,为此Java提供了一个安全机制以防恶意代码的攻击,类加载器的双亲委托工作模式、加载过程中对字节码的校验、分配不同的命名空间以防替代本地的同名类等设计都保证了Java程序的安全性。
Java的存储分配模型也是它防御恶意代码的主要方法之一。学过C语言的开发人员对内存的管理都很头痛。Java语言删除了类似C语言中的指针和内存释放等语法,由JVM自动分配内存,并且提供了强大的垃圾回收机制,人们在使用Java语言时不需要过多考虑内存情况,可以把精力更多专注在业务开发上。