
第1章Java核心技术概述
目前,国内外信息化建设已经进入蓬勃发展阶段,Java作为应用于网络编程的最好语言,前景无限看好。我们首先概要地介绍一下Java核心(Core Java)技术,主要包括以下3个方面。
Java历史、现状和特点。
Java核心技术:面向对象基本概念。
Java核心技术体系结构:基础部分,如数据类型、表达式、流程控制及数组等;应用部分,如图形用户界面(Graphic User Interface)、多线程(Thread)、输入/输出(Input/Output)和网络编程等。
1.1 Java产生的历史、现状和特点
1.1.1 Java产生的历史
Java来自于Sun公司的一个项目,其最初的目的是为家用消费电子产品开发一个分布式应用系统,这样我们就可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制,和它们进行信息交流等。一开始,这个项目准备采用C++,但C++太复杂,而且安全性差,最后基于C++开发了一种新的语言Oak(也就是Java语言的前身),之后命名为Java,并且用它编制了HotJava浏览器,得到了Sun公司的支持,触发了Java进军Internet。Java的取名也有一段趣闻。有一天,Java项目组的几位成员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,这得到了其他人的赞同。于是,Java这个名字就这样传开了。
1995年后,Java得到飞速发展,开发类库不断丰富,性能不断提高,应用领域也不断拓展,尤其是基于网络的应用、嵌入式应用等。
1.Web浏览
Web浏览是现在Internet甚至局域网的主要用途。使用文档能很容易地显示文本和各种图片,还能提供超文本链接。浏览器可以调用用HTML语言编写的文档,但HTML/WWW浏览器技术只限于文本和图像。如果想播放声音文件或运行一个演示程序,你就不得不下载那个文件并用本机上能理解和运行那个文件格式的程序来播放它。Java程序和它的浏览器HotJava,提供了可让你的浏览器运行程序的方法。Java能告诉你的浏览器怎样处理新类型的文件。当我们在网络上传输视频图像时,HotJava将能显示这些视频。
2.网络应用系统
Java是一种与平台无关的语言,因此用Java开发的网络应用系统可以在各种平台上运行,大大提高了开发效率,减少了重复劳动。而且,Java集成的网络功能有利于充分开发网络应用系统。目前,基于网络的应用主要包括:电子商务系统、电子政务系统和企业资源计划管理系统(Enterprise Resource Planning,ERP)等。
1.1.2 Java的现状
Java是Sun公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发,它的平台无关性是它最显著的优点之一。一时间,“面向Internet,用Java编程”成为技术人员的一种时尚。Java作为软件开发的一种革命性的技术,其主导地位已被确立,这表现在以下几个方面。
IT行业的许多大公司购买了Java的许可证,包括IBM,BEA,DEC,Adobe,HP,Oracle,Toshiba等。这一点说明,Java已得到了业界的广泛认可。
众多的软件开发商开始支持基于Java的软件产品。例如:Sun公司自己的Java开发环境Java Workshop已经发布;数据库厂商,如Oracle,Sysbase,Versant都在开发接口,以支持HTML和Java。
Intranet正在成为企业信息系统最佳的解决方案,而其中Java将发挥不可替代的作用。Intranet的目的是把Internet用于企业内部的信息系统,它的优点表现在:便宜、易于使用和管理。用户不管使用何种类型的机器和操作系统,界面是统一的Internet浏览器,而数据库、Web页面、应用程序(用Java编写的Applet)则存在于WWW服务器上,无论是开发人员,还是管理人员或用户都可以受益于该解决方案。
1.1.3 Java语言的特点
Java到底是一种什么样的语言呢?Java是一种简单的面向对象的、分布式的、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的语言。
1.简单
Java最初是为了实现对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java语言的简单性主要体现在以下3个方面。
Java的风格类似于C++,因而C++程序员对此是非常熟悉的。从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很快地掌握Java编程技术。
Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。
Java提供了丰富的类库。
2.面向对象
面向对象可以说是Java最重要的特性。Java语言的设计完全是面向对象的,它不支持类似于C语言面向过程的程序设计技术。Java支持静态和动态风格的代码继承及重用。单从面向对象的特性上来看,Java类似于SmallTalk,但其他特性,尤其是适用于分布式计算环境的特性远远超越了SmallTalk。
3.操作平台无关性
操作平台无关性指的是该语言没有“依据机器的不同而不同”或“由编译器决定”等特点,而且最后编译生成的目标码都是一致的。
Java解释器生成与体系结构无关的字节码(Bytecode)指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台上运行。
不同的操作系统有不同的虚拟机,它类似于一个小巧而高效的CPU。Bytecode代码与平台无关,是虚拟机的机器指令。
4.健壮
Java致力于检查程序在编译和运行时的错误。类型检查可以帮助我们避免许多早期开发出现的错误;Java对内存处理的改进减少了内存出错的可能性;Java还改进了数组,避免了覆盖数据的可能。这些功能特征大大缩短了开发Java应用程序的周期。
5.结构中立
为了建立基于网络的一个整体结构,Java将它的程序编译成一种结构中立的中间文件格式。只要有Java运行时系统的机器都能执行这种中间代码。
现在,Java运行时系统有Solaris 2.4(SPARC)、Win32系统(Windows 95和Windows NT)等。Java源程序被编译成一种高层次的与机器无关的Bytecode格式语言,这种语言被设计在虚拟机上运行,由与机器相关的运行调试器执行。
6.安全
一个安全的网络至少要防止以下几种破坏的可能性。
毁灭系统资源。
消耗系统资源。
挖掘系统或个人机密。
干扰正常工作的进行。
Java的安全性可以从两个方面得到保障。一方面,在Java语言里,像指针和释放内存等C++功能被摒弃,避免了非法内存操作。另一方面,当Java用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。Java语言在机器上执行前,要经过很多次的测试,比如,经过代码校验,检查代码段的格式,检测指针操作、对象操作是否有误,以及是否试图改变一个对象的类型等。
(1)Bytecode校验
如果Bytecode通过代码校验,没有返回错误,我们就可以确定:代码没有堆栈上溢出和下溢出;所有操作代码参数类型都是正确的,且没有发生非法数据转换;访问对象操作是合法的。
(2)类装载(Class Loader)
类装载通过将本机类与网络资源类的名称分开来以保障安全性,因为调入类时总要经过检查,这样避免了特洛伊木马的侵袭。从网络上下载的类被调进一个与资源相关的私有的名字域,当一个私有类访问另一个类时,Built-in Class(本机类)首先被检查,然后检查相关的类,这样就避免了破坏本机类情况的出现。
7.可移植
与体系结构无关的特性,使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。
但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。例如,在Windows 3.1中整数(Integer)为16位,在Windows 95中整数为32位,在DEC Alpha中整数为4位,在Intel 486中为32位。通过定义独立于平台的基本数据类型及其运算,Java数据得以在任何硬件平台上保持一致。Java语言的基本数据类型及其表示方式如下:
byte 8-bit,二进制补码。
short 16-bit,二进制补码。
int 32-bit,二进制补码。
long 64-bit,二进制补码。
float 32-bit,IEEE 754浮点数。
double 32-bit,IEEE 754浮点数。
char 16-bit,Unicode字符。
在任何Java解释器中,数据类型都是依据以上标准具体实现的。因此,目前使用的所有CPU几乎都能支持以上数据类型、8~64位整数格式的补码运算和单/双精度浮点运算。
Java编译器本身就是用Java语言编写的。Java运算系统的编制依据POSIX方便移植的要求,用ANSI C语言写成。Java语言规范中也没有任何同具体实现相关的内容。
8.多线程
Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程有时也被称为小进程,它是一个大进程里分出来的小的独立的进程。因为Java实现了多线程技术,所以比C和C++更健壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。
当然,实时控制性能还取决于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程好。任何用过当前浏览器的人,都感觉为下载一幅图片而等待是一件很烦恼的事情。在Java里,你可以用一个线程来下载一幅图片,而同时你可以访问HTML里的其他信息。
9.动态
Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地调入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的。在C++程序设计过程中,每当在类中增加一个实例变量或一种成员方法后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。
Java通过如下措施来解决这个问题。
Java编译器不是将对实例变量和成员方法的引用编译为数值引用,而是将符号引用信息保存在字节码中并传递给解释器,再由解释器来完成动态连接,然后将符号引用信息转换为数值偏移量。这样,一个在存储器上生成的对象不在编译过程中确定,而是延迟到运行时由解释器确定。因此,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某个类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。
Java还简化了使用升级的或全新的协议的方法。如果你的系统运行Java程序时遇到了不知该怎样处理的程序,没关系,Java能自动下载你所需要的功能程序。