
任务一 认识Java
任务描述
了解Java的发展历史;理解Java语言的特点以及Java程序的运行机制和Java虚拟机。
必备知识
1.Java的发展历史
Java是SUN公司开发出来的一套编程语言,主设计者是James Gosling。它最早来源于一个叫Green的项目,起初打算采用C++进行开发,可是发现C++不能胜任此项工作。由于C++在内存管理是可直接访问地址的,会使系统出现一些问题,所以SUN公司的工程师在C++的基础之上开发了一个新的平台,称为Oak(Java的前身)。然后,他们又对Oak进行了小规模的改造,就这样,Java在1995年诞生了。
Java的发展历程如下:
1996年1月,第一个JDK——JDK1.0诞生。
1999年6月,SUN公司发布Java的三个版本:标准版(J2EE)、企业版(J2EE)和微型版(J2ME)。
J2SE:整个Java技术的核心和基础,它是J2ME和J2EE编程的基础,也是这本书主要介绍的内容。
J2EE:Java技术中应用最广泛的部分,提供了企业应用开发的完整解决方案。
J2ME:主要用于控制移动设备和信息家电等邮箱存储的设备。
2002年2月,SUN公司发布了JDK历史上较为成熟的版本——JDK 1.4,此时由于Compaq、Fujitsu、SAS、Symbian、IBM等公司的参与,使JDK 1.4成为当时发展最快的一个JDK版本。到JDK 1.4为止,用户已经可以使用Java实现大多数的应用。
2004年10月,SUN公司发布了万众期待的JDK 1.5,同时SUN将JDK 1.5改名为Java SE 5.0,J2EE、J2ME也相应地改名为Java EE和Java ME。JDK 1.5增加了诸如泛型、增强的for语句、可变形参、注释、自动拆箱和装箱等功能。同时,推出了EJB 3.0规范和MVC框架规范。
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。
2006年12月,SUN公司发布JRE 6.0。
2009年4月20日,甲骨文74亿美元收购SUN,取得Java的版权。
2011年7月,甲骨文公司发布Java 7的正式版。
2.Java语言的特点
Java语言的流行在于Java语言本身的面向对象、简单、可移植性、安全性、多线程等特点。Java语言的结构与编写方式与C++语言很类似,因此学习Java语言,不仅要了解Java语言独有的编程特点,同时还要有程序设计基础和面向对象的概念。
(1)简单性。Java语言与C++类似,如果用户了解C++和面向对象的概念,就可以很快编写出Java程序;此外,Java摒弃了C++中如头文件、指针变量、结构、运算符重载、多重继承等复杂特性,它只提供了基本的方法,减少了编程的复杂性。
(2)面向对象。所谓面向对象是指现实世界中任何实体都可以看作是对象,对象之间通过消息相互作用。传统的过程式编程语言是以过程为中心、以算法为驱动,而面向对象编程语言则是以对象为中心、以消息为驱动。过程式编程语言用公式表示为:程序=算法+数据;面向对象编程语言用公式表示为:程序=对象+消息。
面向对象的三个特征:封装、多态性和继承。现实世界中的对象均有属性和行为,属性表示对象的数据,行为表示对象的方法。
(3)可移植性。Java严格规定了各种基本数据类型的长度。Java语言经编译后生成与计算机硬件结构无关的字节代码,这些字节代码被定义为不依赖任何硬件平台和操作系统。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。Java程序经过一次编译后可移植到别的系统上解释执行,如MS-DOS、Windows、UNIX等任何平台上运行,具有很强的可移植性。
(4)Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在连接阶段被载入运行环境中。
(5)交互式特性。Java是面向对象的网络编程语言,由于它支持TCP/IP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便实现Java的分布式特性。
(6)多线程机制。Java语言支持多线程机制,多线程机制使得Java程序能够并行处理多项任务。多线程机制可以很容易地实现网络上的交互式操作。C和C++采用单线程体系结构,而Java支持多个线程的同时执行,并提供多线程之间的同步机制。
(7)动态的内存管理机制。Java语言采用了自动垃圾回收机制进行内存的管理。在C++语言中,程序员在编写程序时要及时释放不用的内存单元,一旦内存管理不当,就可能会造成内存泄漏、程序运行故障问题。在Java系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块。这样,编程人员就无须担心内存的管理问题,从而使Java程序的编写变得简单,同时也减少了内存管理方面出错的可能性。
(8)Java是高性能的。与解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
(9)可靠性和安全性。由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。Java虽然源于C++,但它消除了许多C++的不可靠因素,可以防止许多编程错误。首先,Java是强类型的语言,要求用显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界;最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务,便于恢复。
上述几种机制结合起来,使得Java成为安全的编程语言。
3.Java程序的运行机制和Java虚拟机
(1)Java程序的运行机制。Java语言具有解释性语言和编译性语言的特征。编译性语言是指:使用专门的编译器,针对不同的平台将源码一次性翻译成该平台能够执行的机器码,此过程称为编译。编译型语言一次性翻译成机器码的好处是,程序可以脱离开发环境独立运行,运行效率高。但其缺点是因为被翻译成特定平台的机器码,所以无法移植到其他平台上;如果要移植需要在其他平台上重新编译。
解释型语言是指:使用专门的解释器,对源程序进行逐行解释成特定平台的机器码并立即执行的语言,不会进行整体性的编译和连接处理,每次执行时都要进行一次编译。其特点是移植性好,但程序执行效率低。
(2)Java虚拟机(JVM)。在Java中的所有程序都是在JVM(Java虚拟机)上运行的。Java虚拟机有其完善的硬件架构,如处理器、堆栈、寄存器等,还有相应的指令系统。JVM屏蔽了与具体操作系统相关的信息,使得Java程序只需要产生在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的指令执行。
从图1.1中可以得知,Java程序并不是直接交由操作系统处理,而是经过一系列转换,最后经过Java虚拟机的解释器解释后再交由操作系统的。正是这一套机制使得Java程序可以不依赖操作系统,它有自己的处理机制,可以根据不同系统编译、解释出适合于特定系统的代码,从而实现了跨平台功能。

图1.1 Java虚拟机机制