一章绪论【学习目标】1.了解JAVA的发展历史及其特点。2.了解JAVA语言的发展前景。3.了解并掌握JAVA语言的运行环境和配置。4.了解JAVA应用程序的基本结构,并能编写简单的JAVA程序。1.1Java语言概述一、Java语言的发展Java的历史要追溯到1991年,当时美国SunMicrosystems公司的PatrickNaughton及其伙伴JamesGosling带领的工程师小组想要设计一种小型的计算机语言,主要应用对象是有线电视转换盒这类消费设备。由于这些消费设备的处理能力和内存都很有限,所以要求计算机语言必须非常小且能够生成非常紧凑的代码。另外,由于不同的设备生产商会选择不同的中央处理器(CPU),因此这种语言的设计关键是不能与任何特定的体系结构捆绑在一起,这个项目被命名为Green。刚开始,该项目成员准备采用C++语言,但感觉到C++语言太复杂,安全性也差,无法满足项目设计的需要,最后决定基于C++开发一种新的编程语言。Gosling临时为它起名叫Oak语言,但后来发现Oak是一种已有计算机语言的名称,于是又将其改名为Java,并配了一杯冒着热气的咖啡图案作为它的标志。由于要求Java语言非常小且能够生成紧凑的代码,还要求该语言与平台无关。这些要求促使开发团队想起了很早以前的一种模型,某些Pascal的实现曾经在早期的PC上尝试过这种模型。Pascal的发明者NiklausWirth率先设计出一种为假想的机器(虚拟机)生成中间代码的可移植性语言,这种中间代码可以应用于所有已经正确安装解释器的机器。于是,Green项目组的工程师也使用了虚拟机(Java虚拟机),从而解决了课题的主要问题(平台无关性)。1992年,Green项目发布了它的第一个产品,称之为“*7”,这个产品具有非常智能的[键入提要栏内容。提要栏独立于主文档,是对主文档的补充。提要栏通常放置在页面的左侧或右侧,也可以放置在页面的顶端或底端。可使用“文本框工具”选项卡更改提要栏文本框的格式。]名为Green。刚开始,该项目成员准备采用C++语言,但感觉到C++语言太复杂,安全性也差,无法满足项目设计的需要,最后决定基于C++开发一种新的编程语言。Gosling临时为它起名叫Oak语言,但后来发现Oak是远程控制。遗憾的是,SunMicrosystems公司对生产这个产品并不感兴趣,并且Green项目组的人员也没有找出其他的方法来将他们的技术推向市场。1994年,Green项目组(这时换了一个新名字——FirstPerson公司)解散了。在此期间,Internet的万维网日益发展壮大,Web的关键是把超文本页面转换到屏幕上的浏览器,当时的浏览器主要是Mosaic。Java语言的开发者设计并开发了一个功能更加强大的浏览器,该浏览器最终演变为HotJava浏览器。为了展现Java语言超强的能力,HotJava浏览器采用Java语言编写,并且具有执行网页中内嵌代码的能力。这一“技术印证”在1995年的SunWorld上进行展示,同时引发了人们延续至今的对Java的热爱。1996年初,SunMicrosystems公司发布了Java的第一个版本Java1.0,但Java1.0不能用来进行真正的应用开发,后来的Java1.1弥补了其中大部分明显的缺陷,大大改进了它的反射能力,并未GUI编程增加了新的事件处理模型。1998年,JavaOne会议的头号新闻是即将发布Java1.2版,这个版本取代了早期玩具式的GUI,它的图形工具箱更加精细而且具有较强的可伸缩性,能更好地实现“一次编写,随处运行”的承诺。Sun公司将其名称改为更加吸引人的“Java2标准版软件开发工具箱1.2版”。标准版的1.3和1.4版本对最初的Java2版本进行了某些修改,扩展了标准类库,提高了系统性能。5.0版是自1.1版以来第一个对Java语言做出重大改进的版本(这一版本原来被命名为1.5版,在2004年的JavaOne会议之后,版本数字升至5.0)。这个版本增加了泛型类型,其挑战性在于添加这一特性并没有对虚拟机做出任何修改。2005年6月,JavaOne大会召开,SunMicrosystems公司发布JavaSE6。此时,Java的各种版本已经更名并取消其中的数字“2”,J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。二、Java语言的影响及发展前景Java语言是新一代面向对象的程序设计语言,特别适用于Internet应用程序的开发。其硬件和软件平台的无关性直接威胁到Windows和Intel的垄断地位。用Java语言编程成为当今技术人员的一种时尚,并对未来软件的开发产生了重要影响。Java语言对软件开发技术的影响可归纳为以下几个方面:(1)软件的需求分析可将用户的需求进行动态的可视化描述,更加直观地体现设计者的需求。用户的需求是各种各样的,不受地区、行业、部门、爱好的影响,这些需求都可以用Java语言描述清楚。(2)软件的开发方法由于Java语言是纯面向对象的程序设计语言,所以完全可以用面向对象的技术与方法来开发软件,这符合最新的软件开发规范要求。(3)动画效果Java语言的动画效果远比GUI技术逼真,尤其是利用提供的巨大动画资源空间,可以共享全世界的动态画面资源。(4)软件最终产品用Java语言开发的软件具有可视化、可听化、可操作化、交互、动画、动作等特点。Java语言具有广泛的应用前景,大体可以从以下几个方面考虑其应用:所有面向对象的应用开发,包括面向对象的事件描述、处理等。计算过程的可视化、可操作化的软件开发。动态画面的设计,包括图形图像的调用。交互操作的设计(选择交互、定向交互、控制流程等)。的系统管理功能模块的设计,Web页的动态设计、管理交互操作设计等。上的软件开发(直接面向企业内部用户的软件)。其他应用类型的程序(移动计算、嵌入式Java技术、实时Java等)。三、Java语言的特征Java语言具有以下九个特点:1.简单性人们希望构建一个无需专业训练就可以进行编程的系统,并且要符合当今的标准惯例。因此,尽管人们发现C++语言不太适用,但在设计Java的时候还是尽可能地接近C++,以便系统更易于理解。Java剔除了C++中很少使用、难以理解、易混淆的特性。例如,Java中没有指针、结构和类型定义等概念,没有#include和#define等预处理器,也没有多重继承的机制。简单性的另一个含义是“小”。Java的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40KB,再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核),大约需要增加175KB。在当时,这是一个了不起的成就。当然,由于不断的扩展,类库已经相当庞大了。现在有一个独立的具有较小类库的Java微型版(JavaMicroEdition)用于嵌入式设备。2.面向对象性Java是一个纯粹的面向对象的语言,强调的是面向对象的特性,对软件工程技术能够提供很强的支持。Java语言的设计集中于对象及其接口,它提供了简单的类机制及动态的接口模型。与其他面向对象的语言一样,Java具备继承、封装及多态性等特性,同时它还提供了一些类的原型,程序员可以通过继承机制实现代码的复用。另外,Java的继承机制非常独特,在设计时丢掉了不安全的因素,因此使用Java可以编制出非常复杂但逻辑清晰的系统。3.分布式与安全性从诞生之日起Java语言就与网络联系在一起,它强调网络特性,是一种分布式程序设计语言。Java语言包括一个支持HTTP和TCP等TCP/IP协议的子库,提供一个Java.net包,通过它可以完成各种层次上的网络连接。因此,用Java语言编写的应用程序可以凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。Java语言另一个Socket类提供的可靠流式网络连接,使程序设计者可以非常方便地创建分布式应用程序。Java语言在语言定义阶段、字节码检查阶段及程序执行阶段进行的三级代码安全检查机制,对参数类型匹配、对象访问权限、内存回收、Java小应用程序的正确使用等都进行了严格的检查和控制,可以有效地防止非法代码的侵入,阻止对内存的越权访问,避免病毒的侵害。4.与平台无关性如果基本数据类型设计依赖于具体的计算机和操作系统,会给程序的移植带来很大的不便。Java语言通过定义独立于软、硬件平台的基本数据类型及其相关运算,确保数据在任何硬件平台上保持一致。为了实现平台无关性,Java语言规定了统一的基本数据类型。Java程序编译后生成二进制代码,即字节码。字节码就是虚拟机的机器指令,与平台无关。字节码有统一的格式,不依赖于具体的硬件环境。在任意安装了Java运行环境的系统上,都可以执行这些代码。也就是说,只要安装了Java运行环境,Java程序就能在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台上运行。运行环境针对不同的处理器指令系统,把字节码转换成不同的具体指令,保证程序能够“到处运行”。5.编译和解释特性Java开发环境把Java源程序编译后生成一种称为字节代码的中间代码,字节代码非常类似于机器指令代码,但并不是二进制的机器指令代码,而且字节代码并不针对一种特定的机器,所以Java程序不需重新编译便可在众多不同的计算机上执行。只要该机器预先装有Java语言运行系统,这就是Java的编译特性。Java程序编译后产生字节代码,其运行要借助于Java解释器,Java解释器直接对Java字节代码进行解释执行。以字节代码形式发布的Java程序运行在JVM环境,JVM将字节代码翻译成具体的CPU机器指令,因此,Java解释器是与软硬件平台有关的,在不同的平台上用不同的JVM实现(与平台相关部分的工作由JVM而不是Java编译器来完成,因为平台的种类比起应用软件的数量要少得多)。Java解释器使得Java程序在某一特定软、硬件平台环境中直接运行目标代码指令,这种连接程序所需资源通常比编译程序少,所以程序员可以将更多的时间用在创建源程序上,而不必考虑运行环境,这就是Java的解释特性。6.多线程多线程机制使得应用程序能够并行执行,通过使用多线程,程序设计者可以用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上的实时交互行为和实时控制性能。大多数高级语言(包括C、C++等)都不支持多线程,用这样的语言只能编写顺序执行的程序。Java内置了语言级多线程功能,提供现成的Thread类,只要继承这个类就可以编写多线程的程序,使得用户程序能够并行执行。Java提供的同步机制可以保证各线程对共享数据的正确操作,完成各自的特定任务。在硬件条件允许的情况下,这些线程可以直接分布到各个CPU上,充分发挥硬件性能,减少用户等待的时间。7.动态执行Java执行代码是在运行时动态载入的,这种动态特性使得它适合于一个不断发展的环境。在网络环境下,Java语言编写的代码用于瘦客户机架构可减少维护工作。另外,类库中增加的新方法和其他实例不会影响到原有程序的执行,并且Java语言通过接口来支持多重继承,使其比严格的类继承具有更灵活的方式和可扩展性。8.自动废区回收性在用C及C++语言编写大型软件时,编程人员必须自己管理所用的内存块,这项工作非常困难且经常成为出错和内存不足的根源。在Java环境下编程人员不必为内存管理操心,Java语言系统有一个叫做“无用单元收集器”的内置程序,它扫描内存,并自动释放那些不再使用的内存块。Java语言的这种自动废区收集机制,对程序不再引用的对象自动取消其所占资源,能够彻底避免出现存储器泄露之类的错误,并免去了程序员管理存储器的繁琐工作。9.丰富的API文档和类库Java为用户提供了详尽的API文档说明。Java开发工具包中的类库包罗万象、应有尽有,这使得程序员的开发工作可以在一个较高的层次上展开,这也正是Java广受欢迎的重要原