1.1 Java语言概述
1.1.1 Java语言发展
1991年4月,Sun公司的James Gosling领导的绿色计划(Green Project)开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行。他们研发了一种新的语言,该语言以C和C++为基础,James根据他在Sun公司办公室外的一棵橡树,而称其为Oak语言。后来发现已有一种称为Oak的计算机语言。当一些Sun公司的员工到当地一家咖啡店时,有人提议将该语言命名为Java,从而使Java这个名字一直延续至今。
不过,在当时市场不成熟的情况下,他们的项目没有获得成功。市场对智能型电子装置需求的上升率并不像Sun司所期盼的那样快,更糟的是Sun公司参加竞争的一个重要的销售合同被另一公司得去了。此时,Green项目几乎处于被取消的境地。但很幸运的是,1993年万维网(WWW)疯狂地流行起来,由于Internet的迅猛发展和WWW的快速增长,第一个全球信息网络浏览器Mosaic诞生了。此时,工业界非常急迫地需求一种适合在网络异构环境下使用的语言。Games Gosling决定改变绿色计划的发展方向,对Oak进行了小规模的改造。就这样给该项目重新注入了生机,1995年,Oak语言更名为Java语言。Java的诞生标志着互联网时代的开始。
Sun公司于1995年5月在一个重要会议上正式发布了Java。这样的事通常不会引起广泛的注意,但是由于万维网的商业利益,Java立即引起了商业界的极大兴趣。目前,Java被广泛应用于创建具有动态的、交互内容的Web网页,开发大规模企业应用程序,增强万维网服务的功能,向消费者的设备提供应用程序。
1998年是Java迅猛发展的一年。在1998年12月4日,Sun发布了Java历史上最重要的一个版本:JDK 1.2。这个版本的发布标志着Java已经进入Java 2时代。这个时期也是Java飞速发展的时期。在这一年中Sun发布了JSP/Servlet、EJB规范,以及将Java分成了J2EE、J2SE和J2ME。
2000年5月8日,Sun对JDK 1.2进行了重大升级,推出了JDK 1.3。2002年2月13日,Sun公司发布了JDK历史上最为成熟的JDK 1.4版本。2004年10月,Sun发布了期待已久的JDK 1.5版本,同时将JDK 1.5改名为J2SE 5.0。最新版本JDK 8.0加入了很多新特性,是一款革命性开发平台,全面升级了现有的Java流程模式。
Java问世以来,其技术发展非常快,在计算机、移动电话、家用电器等领域都得到了广泛的应用。
1.1.2 Java语言的特点
Java语言的前身是在C++的基础上开发的,它继承了C、C++语言的优点,增加了一些实用的功能,使Java语言更加精炼。Java摒弃了C、C++语言的缺点,去掉了C、C++语言中的指针运算、结构体定义、手工释放内存等容易引起错误的功能和特征,增强了安全性,也使其更容易被接受和学习。Java是独立于平台,面向Internet的分布式编程语言。
Java是一种简单的、面向对象的、分布式的、解释执行的、健壮的、安全的、结构中立的、可移植的、高效率的、多线程的和动态的语言。
1. 简单
Java是一种纯面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了指针、运算符重载、多重继承等内容,并且通过实现无用信息自动回收,大大简化了程序设计者的内存管理工作。同时,Java很小,基本的解释器及类支持大约仅为40KB。
2. 面向对象
Java是一种纯面向对象的语言,Java的核心是面向对象编程。事实上,所有的Java程序都是面向对象的,这一点与C++语言不同,因为在那里可以选择是否面向对象编程。Java程序面向对象的设计思路不同于C语言基于过程的程序设计思路。面向对象程序设计,具备更好地模拟现实世界环境的能力和可重用性。它将待解决的现实问题转换成一组分离的程序对象,这些对象彼此之间可以进行交互。一个对象包含了对应实体应有的信息,以及访问和改变这些信息的方法,重点放在数据(即对象)和对象的接口上。通过这种设计方式,所设计出来的程序更易于改进、扩展、维护和重用。Java语言只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口间的实现机制。
3. 分布式
Java是一种分布式的语言。传统的基于C/S(客户端/服务器)架构的程序,客户端向服务器提出服务请求,服务器将程序执行结果返回,所以,服务器负荷较重。Java采用Java虚拟机架构,可将许多工作直接交由终端处理,因此,数据可以被分布式处理。此外,Java类库的运用,大大减轻了网络传输的负荷。Java类库包含了支持HTTP、FTP等基于TCP/IP的子库。Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。Java的网络功能强大且易于使用,特别是远程方法调用使得分布式对象之间可以互相通信。
4. 高效解释执行
Java是高效解释执行的语言。高级语言程序必须转换为机器语言程序才能在计算机上执行。Java程序在编译时并不直接编译成特定的机器语言程序,而是编译成与系统无关的“字节码(bytecode)”,由Java虚拟机(Java Virtual Machine,JVM)来执行。JVM使得Java程序可以“一次编译,随处运行”。任何系统只有安装了Java虚拟机后,才可以执行Java程序。JVM能直接在任何机器上执行,为字节码提供运行环境。
5. 健壮性
Java是健壮的语言。Java不需要指针就可以构造其他语言中需要指针构造的数据结构,即不会存取“坏的”指针而造成内存分配、内存泄露等错误。在传统的编程环境下,内存管理是一项困难、乏味的工作。例如,在C或C++语言中,必须手工分配、释放所有的动态内存。如果忘记释放原来分配的内存,或是释放了其他程序正在使用的内存时,系统就会出错。同时,在传统的编程环境下,对异常情况必须用既繁琐又难理解的一大堆指令来进行处理。Java通过自行管理内存分配和释放的方法,从根本上消除了有关内存的问题。Java提供垃圾收集器,可自动收集闲置对象占用的内存。Java提供面向对象的异常处理机制来解决异常处理的问题。
6. 安全
Java是安全的网络编程语言,使用Java可以构建防病毒、防篡改的系统。Java提供了一系列的安全机制以防恶意代码攻击,确保系统安全,如禁止运行时堆栈溢出、禁止在自己处理空间外破坏内存。Java的安全机制分为多级,包括Java语言本身的安全性设计,以及严格的编译检查、运行检查和网络接口级的安全检查。
7. 结构中立
Java是结构中立的语言。Java的设计目标是要支持网络应用。Java编译器会产生一种具备结构中立性的对象文件格式,即Java字节码文件。精心设计的Java字节码不仅很容易在任何机器上解释执行,还可以快速翻译成本机的代码。
8. 可移植性
结构中立是确保程序可移植的必要条件,此外,还需要很多其他条件的配合。Java在可移植性方面做了许多工作。Java通过定义独立于平台的基本数据类型及其运算,使数据得以在任何硬件平台上保持一致。例如,Java中的int类型永远是32位的整数,这样就消除了代码移植时的主要问题。
9. 高效率
Java是高效率的语言。每一次的版本更新,Java在性能上均做出了改进。在历经数个版本变更后,Java已经拥有与C/C++同样甚至更好的运行性能。当JVM解释执行Java程序时,Java实时编译器(Just-In-Time,JIT)会将字节码译成目标平台对应的机器语言的指令代码,并将结果进行缓存,因为JVM能够直接使用JIT编译技术将经过精心设计的字节码转换成高性能的本机代码,所示Java可以在非常低档的CPU上顺畅运行。
10. 多线程
Java是支持多线程的语言。多线程可以带来更好的交换响应和实时行为。多线程是一种应用程序设计方法。线程是从大进程里分出来的、小的、独立的进程,使得在一个程序里可同时执行多项小任务。多线程带来的好处是具有更好的交互性能和实时控制性能,但采用传统的程序设计语言(如C/C++)实现多线程非常困难。Java实现了多线程技术,提供了一些简便地实现多线程的方法,并拥有一套高复杂性的同步机制。
11. 动态
Java语言具有动态特性,能够适应不断发展的环境。Java的动态特性是其面向对象设计方法的扩展,库中可以自由地添加新方法和实例变量,允许程序动态地装入运行过程中所需的类,Java将符号引用信息在字节码中保存后传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数据偏移量。存储器生成的对象不在编译过程中确定,而是延迟到运行时由解释器确定。
1.1.3 Java平台
Java推出了3个领域的应用平台:标准版Java 2 Platform Standard Edition(Java SE)、企业版Java 2 Platform Enterprise Edition(Java EE)和微型版Java 2 Platform Micro Edition(Java ME)。
Java SE是各应用平台的基础。Java SE可以分为4个主要部分:JVM、JRE、JDK和Java语言。为了能运行Java程序,平台上必须安装有Java虚拟机(Java Virtual Machine,JVM)。JVM包含在Java运行环境(Java SE Runtime Environment,JRE)和Java开发包(Java Development Kit,JDK)等java软件中。JDK包括了JRE及开发过程中所需要的一些工具程序,如Javac、Java、Appletviewer等。安装JRE软件则可以运行Java程序;安装JDK软件则不但能运行Java程序,还可以编译开发Java程序。Java语言只是Java SE的一部分。此外,Java提供了庞大且功能强大的API(Application Programming Interface)类库,可以使用这些API作为基础进行程序开发,而无需重复开发功能相同的组件。
Java EE以Java SE为基础,定义了一系列的服务、API、协议等,适用于开发分布式、多层式(Multi-tiered)、以组件为基础、以Web为基础的应用程序。整个Java EE的体系是相当庞大的,比较常用的技术有JSP、Servlet、Enterprise JavaBeans(EJB)、Java Remote Method Invocation(RMI)等。
Java ME是Java平台版本中最小的一个,是作为小型数字设备上开发及部署应用程序的平台,如消费型电子产品、嵌入式系统等。