1.1 Java概述
Java自诞生以来,越来越受到开发者的欢迎,其使用也越来越广泛。作为面向对象技术的一个代表,用其可在当今商业应用中更容易地开发出高效且多层的分布式应用程序。
1.1.1 Java简介
Java语言是一种面向对象的编程(OOP)语言,句法与C++相似,语义则与Small Talk TM相似。Java编程语言可被用来创建任何常规编程语言所能创建的应用程序。
Java编程语言是基C++之后的一种面向对象的程序设计语言,用来创建应用程序。在任何计算平台上安全地运行,其标志性的口号是“Write Once,Run Anywhere”(一次编写,到处运行)。Java作为一个分布式且面向对象的程序设计语言,可以在位于任何地方的任何计算机中运行其应用程序。
在World Wide Web(WWW)和能够运行称为“Applet程序”的浏览器的有关介绍中,总是提及Java编程语言。Applet是一种嵌入到浏览器中用Java编程语言编写的程序,通常由浏览器下载到客户系统中,并通过浏览器运行。Applet通常较小,以减少下载时间,由超文本标识语言(HTML)的Web页来调用。
Java应用程序是一种独立的程序,不需要任何Web浏览器来执行。它是一种典型的通用程序,可运行于任何具备Java运行环境的设备中。
Java编程语言的优点是显而易见的,对于不同的用户有不同的优点。
(1)对管理人员,实现了更快和更廉价的开发与维护过程。
(2)对分析与设计人员,建模处理变得更加简单,能生成清晰且易于维护的设计方案。
(3)对程序员,对象模型显得十分高雅和浅显。此外,面向对象工具及库的巨大威力使编程成为一项使人愉悦的任务。
如果说缺点,那就是掌握它需付出的代价。思考对象时需要采用形象思维,而不是程序化的思维。与程序化设计相比,对象的设计过程更具挑战性,特别是在尝试创建可重用并可再生的对象时。
对于成功的面向对象程序设计语言,Java不仅集成了这种语言的语法及一个编译程序(编译器),而且还有一个成功的开发环境。其中包含设计优良且易于使用的库,所以大多数程序员的首要任务就是用现有的对象解决自己的应用问题。
1.1.2 Java的特点
Java是一个广泛使用的网络编程语言,是一种新的计算概念。
首先,作为一种程序设计语言,Java简单、面向对象、不依赖于机器的结构、具有可移植性、可靠性、安全性,并且提供了并发的机制,具有很高的性能。
其次,Java最大限度地利用了网络。Java的Applet可在网络上传输,而不受CPU和环境的限制。另外Java还提供了丰富的类库,使程序设计人员可以很方便地建立自己的系统。
Java语言的特点是简单、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程,以及动态性等。
下面分别从以下几个方面来讨论Java语言的特点,然后通过与C和C++相比进一步指出Java所具有的优劣。
1.语言特点
(1)简单性。
Java是一种面向对象的语言,通过提供最基本的方法来完成指定的任务。只需理解一些基本的概念,就可以用其编写出适合于各种情况的应用程序。Java略去了运算符重载及多重继承等模糊的概念,并且通过实现自动垃圾收集,大大简化了程序员的内存管理工作。另外,Java也适合于在小型机上运行。基本解释器及类的支持只有40 KB左右,加上标准类库和线程的支持也只有215 KB左右。
(2)面向对象。
Java语言的设计集中于对象及其接口,提供了简单的类机制及动态的接口模型,对象中封装了状态变量及相应的方法实现了模块化和信息隐藏;类则提供了类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,从而实现了代码的复用。
(3)分布性。
Java是面向网络的语言,通过其类库可以处理TCP/IP协议,用户可以通过URL地址在网络上方便地访问其他对象。
(4)可靠性。
Java在编译和运行程序时,均检查可能出现的问题,以消除错误。Java提供自动垃圾收集来管理内存,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的异常处理机制,在编译时Java提示出可能出现,但未被处理的异常,帮助程序员正确地选择以防止系统崩溃。另外,Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时出现不匹配问题。
(5)安全性。
用于网络及分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现。这样防止程序员使用木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。
(6)平台无关性。
Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序即可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后转换字节码,使之能够在不同的平台上运行。
(7)可移植性。
与平台无关的特性使Java程序可以方便地移植到网络上的不同机器中。
同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器由Java语言实现,Java运行时系统由标准C实现,从而使得Java系统本身也具有可移植性。
(8)解释执行。
Java解释器直接解释执行Java字节码,字节码本身携带了许多编译时信息,使得连接过程更加简单。
(9)高性能。
和其他解释执行的语言,如BASIC和TCL不同,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。
(10)多线程。
多线程机制使应用程序能够并发执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序员可以分别用不同的线程完成特定的行为,而不需要采用全局事件循环机制,这样就很容易地实现网络上的实时交互行为。
(11)动态性。
Java的设计适合于一个不断发展的环境,在类库中可以自由地添加新的方法和实例变量,而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使类的继承具有更灵活的方式和扩展性。
2.Java Applet
Java语言的特性使其可以最大限度地利用网络,Applet是Java的小应用程序,是动态、安全且跨平台的网络应用程序。Java Applet嵌入HTML语言,通过主页发布到Internet。网络用户访问服务器的Applet时,这些Applet从网络上传输,然后在支持Java的浏览器中运行。由于Java语言的安全机制,用户一旦载入Applet,就可以放心地来生成多媒体的用户界面或完成复杂的计算,而不必担心病毒的入侵。虽然Applet可以和图像、声音及动画等一样从网络上下载,但并不同于这些多媒体的文件格式。可以接收用户的输入,动态地进行改变,而不仅仅是显示动画和播放声音。
3.丰富的类库
Java提供了大量的类以满足网络化、多线程且面向对象系统的需要。
(1)语言包提供的支持包括字符串处理、多线程处理、异常处理及数学函数处理等,可以简单地实现Java程序的运行平台。
(2)实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。
(3)输入输出包用统一的“流”模型来实现所有格式的I/O,包括文件系统、网络和输入输出。
(4)低级网络包用于实现套接字(Socket)编程。
(5)抽象图形用户接口包实现不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条及对话框等,使得Java可以移植到不同平台的机器中。
(6)网络包支持Internet的TCP/IP协议,提供了与Internet的接口。支持URL连接及WWW的即时访问,并且简化了客户/服务器模型的程序设计。
1.1.3 Java语言的应用前景
Java语言有广泛的应用前景,大体上可以从以下几个方面来考虑其应用。
(1)所有面向对象的应用开发,包括面向对象的事件描述、处理及综合等。
(2)计算过程的可视化及可操作化的软件的开发。
(3)动态画面的设计,包括图形图像的调用。
(4)交互操作的设计(选择交互、定向交互及控制流程等)。
(5)Internet的系统管理功能模块的设计,包括Web页面的动态设计、管理和交互操作设计等。
(6)Intranet(企业内部网)上的软件开发(直接面向企业内部用户的软件)。
(7)与各类数据库连接查询的SQL语句实现。
(8)其他应用类型的程序。
1.1.4 J2SDK、JDK、JRE和JVM
J2SDK(Software Development Kit for Java 2),简称“JDK”,包括JDK(Java Development Kit,Java开发工具包)、JRE(Java Runtime Enviroment,Java运行时环境)和Java Plug-in。通常所说的JDK及下载并安装的JDK指J2SDK。
JDK是一组API,也可以说是一些Java Class。作为整个Java的核心,其中包括Java运行环境、一组Java工具和Java基础的类库。JDK是一切Java应用程序的基础,所有的Java应用程序是构建在其之上。Java应用服务器的实质是内置了某个版本的JDK,因此掌握JDK是学好Java的第1步。
主流的JDK由Sun公司发布,还有很多公司和组织都开发了自己的JDK。例如IBM公司开发的JDK、BEA公司开发的Jrocket,还有GNU组织开发的JDK等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多,而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。
JRE是运行Java程序必不可少的,一个Java技术的运行环境可运行为JVM编译的代码并执行如下3大任务。
(1)加载代码:由类加载器执行。
(2)校验代码:由字节码校验器执行。
(3)执行代码:由运行时的解释器执行。
Java喊出的带有标志性的口号“Write Once,Run Anywhere(一次编写,到处运行)”正是建立在JRE的基础之上,即在Java应用程序和操作系统之间增加了虚拟层——JRE。程序源代码不是直接编译后链接为机器代码,而是首先转换为字节码(bytecode)这种特殊的中间形式,然后转换为机器码或系统调用。前者是传统的编译方法,生成的机器代码不可避免地与特殊的操作系统和特殊的机器结构相关。而Java程序的字节码文件可以放到任意装有JRE的计算机运行,由不同JRE将字节码文件转换为相应的机器代码,从而实现了Java程序的可移植性。这样程序员也不用关心程序运行的具体环境,而可以专心编写软件。这种分层抽象且隐藏细节的思想在计算机科学中处处可见,比如机器组织结构的设计和网络协议的实现等。
JVM是一台虚拟的计算机,能模拟各种计算机的功能。有处理器、堆栈和寄存器等虚拟的硬件架构,同时还有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java语言编译程序只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,从而实现Java程序的跨平台特性。JRE目录下的Bin目录中的两个目录server与client就是真正的jvm.dll所在。jvm.dll无法单独工作,当其启动后使用explicit的方法(即使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位于jvm.dll所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录下的jvm.dll即可。
1.1.5 JDK 6新增功能
JDK 6在多方面提供了如下实用和方便的功能。
(1)Instrumentation新功能。
在JDK 6中把Java的Instrument功能从本地代码中解放出来,使之可以用Java代码的方式解决问题。使用Instrumentation,程序员可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在JVM上的程序,甚至能够替换和修改某些类的定义。
(2)HTTP新增功能。
JDK 6与HTTP相关的诸多新特性使得Java平台本身对网络编程,尤其是基于HTTP协议的Internet编程,有了更加强大的支持。
(3)JMX与系统管理。
JMX与系统管理提供Java管理扩展(JMX)架构及其框架,可以通过JDK开发自检测程序提供大量轻量级的检测JVM和运行中对象/线程的方式,从而提高了Java语言自己的管理监测能力。
(4)编译器API。
JDK 6中新增加了编译器API(JSR 199),用其可以在运行时调用Java编译器编译不同形式的源代码文件,还可以采集编译器的诊断信息。
JDK 6的编译器新特性使得程序员可以更自如地控制编译的过程,为工具开发人员提供更加灵活的自由度。通过API的调用完成编译操作的特性,使得程序员可以更方便且高效地将编译变为软件系统运行时的服务,而编译更广泛形式的源代码则为整合更多的数据源及功能提供了强大的支持。相信随着JDK的不断完善,更多的工具将具有API支持。
(5)JDBC和JDBC 4.0。
JDK6增加了在数据库编程方面的新特性,包括嵌入在JDK中的数据库(Apache Derby)和JDBC 4.0。
(6)对脚本语言的支持。
JDK 6提供了对JSR 223的支持,旨在定义一个统一的规范。使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的。
该规范提供了一种从Java内部执行脚本编写语言的方便且标准的方式,并提供从脚本内部访问Java资源和类的功能。
(7)XML API与Web服务。
JDK 6中提供了XML处理框架,以及在此框架之上结合注释(Annotation)的技术提供了强大的针对Web服务的支持。
1.1.6 Java扩展
Java不仅是编程语言,还是一个开发平台,Java技术为程序员提供了许多工具,如编译器、解释器、文档生成器和文件打包工具等。同时Java还是一个程序发布平台,有两种主要的发布环境,首先是JRE包含了完整的类文件包;其次许多主要的浏览器都提供了Java解释器和JRE。目前Sun公司把Java平台划分成J2EE、J2SE及J2ME共3个平台,针对不同的市场目标和设备进行定位。J2EE是Java2 Enterprise Edition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。其本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择。IBM、Oracle、BEA及HP等29家已经推出了自己的产品,其中尤以BEA公司的weglogic产品和IBM公司的websphare最为著名。J2EE将逐步发展成为可以与微软的.NET战略相对抗的网络计算平台;J2SE是Java2 Standard Edition,主要目的是为台式机和工作站提供一个开发和运行的平台。在学习Java的过程中,主要是采用J2SE来开发;J2ME是Java2 Micro Edition,主要是面向消费电子产品,为消费电子产品提供一个Java的运行平台,使得Java程序能够在手机、机顶盒及PDA等产品上运行。