第 1 章 开篇综述
Java诞生到现在已经有20多年了,但是Java仍然是非常热门的编程语言之一,很多平台中使用Java开发。表1-1所示的是TIOBE社区发布的2016年5月和2017年5月的编程语言排行榜,可见Java语言的热度,或许这也是很多人选择学习Java的主要原因。
表 1-1 TIOBE编程语言排行榜
1.1 Java语言历史
在正式学习Java语言之前,读者有必要先来了解一下Java的历史。1990年底美国Sun公司1成立了一个叫做Green的项目组,该Green项目主要目标是为消费类电子产品开发一种分布式系统,使之能够操控电冰箱、电视机等家用电器。
1Sun Microsystems公司创建于1982年,主要产品是工作站及服务器。1986年在美国成功上市,1992年Sun推出了市场上第一台多CPU台式机,1993年进入财富500强,1995年开发了Java语言,2010年被Oracle(甲骨文)公司收购。现在Java技术是由甲骨文公司提供的。
消费类电子产品种类很多,包括掌上电脑(个人数字助理,Personal Digital Assistant,简称PDA)、机顶盒、手机等等,这些消费类电子产品所采用的处理芯片和操作系统基本上都是不相同的,存在跨平台等问题。开始Green项目组考虑采用C++语言来编写消费类电子产品的应用程序,但是C++语言过于复杂、庞大,而且安全性差。于是他们设计并开发出一种新的语言——Oak(橡树)。Oak这个名字来源于Green项目组办公室窗外的一棵橡树。由于Oak在进行注册商标时已经被注册,他们需要为这个新语言取一个新的名字,有一天,几位项目的成员正在咖啡馆喝着Java(爪哇)咖啡,其中一个人灵机一动说就叫Java怎么样?马上得到了其他人的同意,于是这个新的语言取名为Java。
Sun在1996年发布了Java 1.0,但是Java 1.0开发的应用速度很慢,并不适合做真正的应用开发,直到Java 1.1后速度有了明显的提升。Java设计之初是为消费类电子产品开发应用,但是真正使Java流行起来是在互联网上的Web应用程序,上个世纪90年代正在互联网发展起步阶段,互联网上设备差别很大,需要应用程序能够跨平台运行,那么Java语言具有“一经编写到处运行”的跨平台能力。
到本书编写时,Oracle公司已经发布了Java 8,Java 9将在2017年秋季发布。Java在20多年发展过程中,与时俱进,为了适应时代的需要,经历过两次重大的版本升级,一个是Java 5,Java 5提供了泛型等重要的功能;另一个是Java 8,Java 8中提供了Lambda表达式和枚举类等重要的功能。
1.2 Java语言特点
Java语言能够流行起来,并长久不衰,得益于Java语言有很多优秀的关键特点。这些特点包括:简单、面向对象、分布式、结构中立、可移植、解释执行、健壮、安全、高性能、多线程和动态。下面详细解释一下:
简单
Java设计目标之一就是能够方便学习,使用简单。由于当初C++程序员很多,介绍C++语言的书籍也很多,所以Java语言的风格设计成为类似于C++语言风格,但Java摒弃了C++中容易引发程序错误的地方,如指针、内存管理、运算符重载和多继承等。一方面C++程序员可以很快迁移到Java;另一方面没有编程经验的初学者也能很快学会Java。
面向对象
面向对象是Java最重要的特性。Java是彻底的、纯粹的面向对象语言,在Java中“一切都是对象”。Java完全具有面向对象三个基本特性:封装、继承和多态,其中封装性实现了模块化和信息隐藏,继承性实现了代码的复用,用户可以建立自己的类库。而且Java采用的是相对简单的面向对象技术,去掉了多继承等复杂的概念,只支持单继承。
分布式
Java语言就是为分布式系统而设计的。JDK(Java Development Kits,Java开发工具包)中包含了支持HTTP和FTP等基于TCP/IP协议的类库。Java程序可以凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。
结构中立
Java程序需要在很多不同网络设备中运行,这些设备有很多不同类型的计算机和操作系统。为能够使Java程序能在网络的任何地方运行,Java编译器编译生成了与机器结构(CPU和操作系统)无关的字节码(byte-code)文件。任何种类的计算机,只要可以运行Java虚拟机,字节码文件就可以在该计算机上运行。
可移植
体系结构的中立也使得Java程序具有可移植性。针对不同的CPU和操作系统Java虚拟机有不同的版本,这样就可以保证相同的Java字节码文件可以移植到多个不同的平台上运行。
解释执行
为实现跨平台,Java设计成为解释执行的,即Java源代码文件首先被编译成为字节码文件,这些字节码本身包含了许多编译时生成的信息,在运行时候Java解释器负责将字节码文件解释成为特定的机器码进行运行。
健壮
Java语言是强类型语言,它在编译时进行代码检查,使得很多错误能够在编译期被发现,不至于在运行期发生而导致系统崩溃。
Java摒弃了C++中指针操作,指针是一种很多强大的技术,能够直接访问内存单元,但同时也很复杂,如果指针操控不好,会引起导致内存分配错误、内存泄漏等问题。而Java中则不会出现由指针所导致的问题。
内存管理方面C/C++等语言采用手动分配和释放,经常会导致内存泄漏,从而导致系统崩溃。而Java 采用自动内存垃圾回收机制2,程序员不再需要管理内存,从而减少内存错误的发生,提高了程序的健壮性。
安全
在Java程序执行过程中,类装载器负责将字节码文件加载到Java虚拟机中,这个过程中由字节码校验器检查代码中是否存在着非法操作。如果字节码校验器检验通过,由Java解释器负责把该字节码解释成为机器码进行执行,这种检查可以防止木马病毒。
另外。Java虚拟机采用的是“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存。
高性能
Java编译器在编译时对字节码会进行一些优化,使之生成高质量的代码。Java字节码格式就是针对机器码转换而设计的,实际转换时相当简便。Java在解释运行时采用一种即时编译技术,可使Java程序的执行速度提升很大。多年的发展Java虚拟机也有很多改进这都使得Java程序的执行速度提升很大。
多线程
Java是为网络编程而设计的,这要求Java能够并发处理多个任务。Java支持多线程编程,多线程机制可以实现并发处理多个任务,互不干涉,不会由于某一任务处于等待状态而影响了其它任务的执行,这样就可以容易的实现网络上的实时交互操作。
动态
Java应用程序在运行过程中,可以动态的加载各种类库,即使是更新类库也不必重新编译使用这一类库的应用程序。这一特点使之非常适合于网络环境下运行,同时也非常有利于软件的开发。
2在Java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。
1.3 Java平台
Java不仅是编程语言,还是一个开发平台,Sun公司根据Java应用领域的不同将Java分成三个平台:Java SE、Java EE和Java ME。
1.3.1 Java SE
Java SE是Java Standard Edition,主要目的是为台式机和工作站桌面应用(Application)程序的版本。Java SE是其他平台的基础,本书主要介绍的就是Java SE版本中的技术。
Java SE中主要包含了:JRE(Java SE Runtime Environment,Java SE运行环境)、JDK(Java Development Kit,Java开发工具包)和Java核心类库。如果只是运行Java程序,不考虑开发Java程序,那么只安装JRE就可以了。在JRE中包含了Java程序运行所需要的Java虚拟机(JVM,Java Virtual Machine)。JDK中包含了JRE和一些开发工具,这些工具包括:编译器、文档生成器和文件打包等工具。
另外,Java SE中还提供了Java应用程序开发需要的基本的和核心的类库,这些类库:字符串、集合、输入输出、网络通信和图形用户界面等。事实上学习Java就是在学习Java语法和Java类库使用。
1.3.2 Java EE
Java EE是Java Enterprise Edition,主要目的是为简化企业级系统的开发、部署和管理。Java EE是以Java SE为基础的,并提供了一套服务、API接口和协议,能够开发企业级分布式系统、Web应用程序和业务组件等,其中的包括:JSP、Servlet、EJB、JNI和Java Mail等。
1.3.3 Java ME
Java ME是Java Micro Edition,主要是面向消费类电子产品,为消费电子产品提供一个Java的运行平台,使得Java程序能够在手机、机顶盒、PDA等产品上运行。Java ME在早期的诺基亚塞班手机系统有很多应用,而现在的iOS和Android等智能手机中基本上没有它的用武之地。
1.4 Java虚拟机
Java应用程序能够跨平台运行,主要是通过Java虚拟机实现的。如图1-1所示,不同软硬件平台Java虚拟机是不同的,Java虚拟机往下是不同的操作系统和CPU,使用或开发时需要下载不同的JRE或JDK版本。Java虚拟机往上是Java应用程序,Java虚拟机屏蔽了不同软硬件平台,Java应用程序不需要修改,不需要重新编译直接可以在其他平台上运行。
图1-1 Java虚拟机
Java虚拟机中包含了Java解释器,Java程序运行过程如图1-2所示,首先由编译器将Java源程序文件(.java文件)编译成为字节码文件(.class文件),然后再由Java虚拟机中的解释器将字节码解释成为机器码去执行。
图1-2 Java程序运行过程
本章小结
本章首先介绍了解到Java的历史、Java语言的特点,然后介绍了Java三大平台,最后介绍了Java虚拟机。