Java概述 Java是Sun公司推出的新一代面向对象程序设计语言,具有安全、跨平台、面向对象、简单、稳定、解释执行、多线程等显著特点,是目前使用最为广泛的网络编程语言。 1.1 Java的诞生与发展 Java来自于Sun公司的一个叫Green的项目,早期的成员是Patrick Naughton、James Gosling和Mike Sheridan,现在大家较为熟悉的成员是James Gosling,其原先的目的是为家用消费电子产品开发一个分布式代码系统,通过把E-mail发给电冰箱、电视机等家用电器,来实现对它们的控制。开始准备采用C++,但C++太复杂,安全性差,最后基于C++开发了一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾以该语言投标一个交互式电视项目,但结果被SGI打败。可怜的Oak几乎无家可归,恰巧这时MarkArdreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官ScottMcNealy的支持,触发了Java进军Internet。Java名称来源于印尼的一个岛屿“爪哇”,此岛盛产咖啡。Java开发的窗口程序的左上角的小图标是一杯热气腾腾的咖啡,这就是Java程序的标志。 自从1995年Sun公司正式发布Java 1.0版以来,在全球范围内引发了经久不衰的Java热潮,Java的版本也不断更新到v1.1、v1.2、v1.3、v1.4、v1.5(现更名为5.0版本),其内容也有了巨大的改进和扩充,Java 1.2以后的版本也称为Java 2。 Java不仅是编程语言,还是一个开发运行平台,目前Sun公司把Java平台划分为J2SE、J2ME和J2EE共3个平台,针对不同的市场目标和设备进行定位。 J2SE(Java 2 Platform Standard Edition):Java 2标准版。主要目的是为台式机和工作站提供一个开发和运行的平台。我们在学习Java的过程中,主要是用J2SE来进行开发。J2SE的类库结构和开发工具API如图1.1所示。 J2ME(Java 2 Platform Micro Edition):Java 2微型版。用于嵌入式应用的Java 2平台,是为无线电子市场所设计的,被使用在各种各样的消费电子产品上,例如智能卡、手机、PDA和电视机顶盒等方面。J2ME可以升级到J2SE和J2EE。 J2EE(Java 2 Platform Enterprise Edition):Java 2企业版。为企业计算提供一个应用服务器的运行和开发平台。J2EE本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择。IBM、Oracle、BEA、HP等29家公司已经推出了自己的产品,其中尤以BEA公司的weblogic产品和IBM公司的websphare最为著名。J2EE将逐步发展成为可以与微软公司的.NET战略相对抗的网络计算平台。 图1.1 J2SE的类库结构和开发工具API 1.2 Java的特点 Java的优点主要表现在:简单、面向对象、自动内存管理、分布式计算、稳定、安全、解释执行、结构中立、平滑移植、多线程,以及异常处理等方面。 1.面向对象 Java是一种纯面向对象的程序设计语言。面向对象的程序设计思想是对面向过程程序设计思想的一次革命,是一种以数据(对象)及其接口为中心的程序设计技术,面向对象的设计可以说是定义程序模块如何“即插即用”的机制。与以前的结构化程序设计相比,它能够更好地模拟现实世界,有利于开发人员对应用程序的构思。Java的面向对象机制实际上可以看作是C++面向对象机制的延伸。Java提供了简单的类机制和动态的构架模型,对象中封装了它的状态变量(数据成员)和方法(函数、过程),实现了模块化和信息隐藏;而类是创建一组相似对象的一种模板,通过继承和重载机制,子类可以使用或者重新定义父类(也称为超类)所提供的过程,从而实现代码复用。 2.简单 Java的语法规则和C/C++类似,所以熟悉C/C++的编程人员稍加学习就不难掌握Java的编程技术。Java摒弃了C++中容易引发程序错误的概念,如指针、运算符重载、多重继承等。通过Java提供的丰富类库大大简化了Java程序设计开发。Java对环境要求非常低,它的基本解释器及类的支持只有几十千字节,加上标准类库和线程的支持也只有200多千字节。 3.自动垃圾回收机制 在程序的执行过程中,部分内存在使用后就处于闲置状态,如果不及时回收这些无用内存就会造成内存泄露,甚至系统崩溃。在C++中,由程序员负责内存的回收,内存管理增加了程序员的工作量。而在Java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测不再使用的内存并进行自动回收。Java的自动内存回收机制简化程序开发的同时,提高了程序的稳定性和可靠性。 4.分布性 Java具有支持分布式计算的特征。分布式计算中,“分布”具有两层含义:一是数据分布,即应用系统所操作的数据可以分散存储在不同的网络结点上;二是操作分布,即应用系统的计算可由不同的网络结点完成。Java实现两种层次上的分布。 数据分布支持:通过Java的URL类,Java程序可以访问网络上的各类信息资源。访问方式完全类似于本地文件系统。 操作分布支持:Java通过嵌在WWW页面中的小应用程序(Applet)将计算从服务器分布至客户机。Applet由WWW浏览器在客户端执行,从而避免了网络拥挤,提高了系统效率。 5.健壮性(鲁棒性) Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。Java在编译和连接时都进行大量的类型检查,防止不匹配问题的发生。在Java程序中不能采用地址计算的方法通过指针访问内存单元,大大减少了错误发生的可能性;而且Java的数组并非用指针实现,这样就可以在检查中避免数组越界的发生。垃圾自动回收机制也增加了Java的健壮性。 6.安全性 Java的设计目的是提供一个用于网络/分布式的计算环境。因此,Java强调安全性,如确保无病毒、小应用程序运行安全控制等。Java的验证技术是以公钥(public-key)加密算法为基础,而且从环境变量、类加载器、文件系统、网络资源和名字空间等方面实施安全策略。Java程序本身不操纵内存,这减少了内存出错的可能性,而让操作系统管理内存,这有效地避免了恶意代码的破坏和病毒的入侵,极大地提高了在网络环境下运行应用程序的安全性,同时也大大减轻了程序员的负担。 7.解释执行 Java解释器(interpreter)直接对Java字节码进行解释执行。字节码本身携带了许多编译时的信息,使得连接过程更加简单。 8.结构中立 网络上充满了各种不同类型的计算机和操作系统,为使Java程序能在网络的任何地方运行,Java编译器生成了与体系结构无关即结构中立(architecture neutral)的字节码文件格式,可以在所有提供Java虚拟机(JVM)的多种不同主机、不同处理器上运行。 9.可移植性 Java解释器生成与体系结构无关的字节码文件(*.class),只要安装了Java虚拟机的计算机都可以执行这种字节代码文件,Java虚拟机把这种字节代码文件翻译成所在系统的机器代码并执行之。因此,Java具有高度的可移植性,实现了其他程序设计语言所不具备的“一次编写,到处运行”(write once,run every where)的平台无关性。用Java开发成的系统其移植工作几乎为零,一般情况下只需对配置文件、批处理文件进行相应修改即可实现平滑移植。 10.多线程 Java的多线程(multithreading)机制使得在一个应用程序里可以同时执行多个小任务,而且同步机制保证了对共享数据的正确操作。多线程带来的更大好处是更好的交互性能和实时控制性能。Java实现的多线程技术比C/C++更健壮。 11.高性能 虽然Java是解释执行的,但它仍然具有非常高的性能,在一些特定的CPU上,Java字节码可以快速地转换成为机器码来执行。而且Java字节码格式的设计就是针对机器码的转换,实际转换时相当简便,自动的寄存器分配与编译器对字节码的一些优化可使之生成高质量的代码。随着Java虚拟机的改进和即时编译技术的出现使得Java执行速度有了更大的提高。Java解释器一秒钟内可调用30万个过程,翻译目标代码的速度与C/C++的性能没什么区别。 12.动态性 Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。 1.3 Java与C/C++的区别 Java的语法风格近似于C++语言,但Java更简单,摒弃了C/C++中许多复杂的内容。具体区别如下: 1.全局变量 Java程序不能定义程序的全局变量,而类中的公共、静态变量就相当于这个类的全局变量。这样就使全局变量封装在类中,保证了安全性,而在C/C++中,由于不加封装的全局变量往往会由于使用不当而造成系统的崩溃。 2.条件转移指令 C/C++中用goto语句实现无条件跳转,而Java中没有goto语句,通过例外处理语句try、catch、finally来取代之,提高了程序的可读性,使得程序的结构化程度更高,也增强了程序的健壮性。 3.指针 指针是C/C++中最灵活,但也是最容易出错的数据类型。用指针进行内存操作往往造成不可预知的错误,而且通过指针对内存地址进行显式类型转换后,破坏了安全性。在Java中没有指针,程序员不能进行任何指针操作,同时Java中的数组是通过类来实现的,很好地解决了C/C++中数组越界不做检查的缺点。 4.内存管理 在C语言中,程序员使用库函数malloc()和free()来动态分配和释放堆内存空间,C++中则是通过运算符new和delete来动态分配和释放堆内存空间。再次释放已经释放的内存块或者释放未被分配的内存块,会造成系统的崩溃,而忘记释放不再使用的内存块也会逐渐耗尽系统资源。内存管理由程序员完成,既增加了程序员的负担,也容易造成程序运行错误。在Java中,所有的数据结构都是对象,通过运算符new分配内存并得到对象的使用权。自动垃圾回收机制保证了系统资源的完整,避免了内存管理不当而引起的系统崩溃。 5.数据类型的一致性 在C/C++中,不同的平台上,编译器对简单的数据类型如int、float等分别分配不同的字节数,导致了代码数据的不可移植。在Java中,对不同的数据类型总是分配固定长度的位数,保证了Java数据的平台无关性和可移植性。 6.类型转换 在C/C++中,可以通过指针进行任意的类型转换,不安全因素大大增加。而在Java中系统要对对象的处理进行严格的相容性检查,防止不安全的类型转换。 7.头文件 在C/C++中使用头文件声明类的原型和全局变量及库函数等,在大的系统中,维护这些头文件是非常困难的。Java中舍去了头文件,采用了更先进的包(package)的概念来管理维护系统类库以及用户自定义类。 8.编译预处理 C/C++中有编译预处理命令,Java不支持编译预处理。 9.结构体和共用体 C/C++中用结构体和共用体来表示一定的数据结构,但是由于其成员均为公有的,安全性上存在问题。Java不支持结构体和共用体数据类型,通过类把数据结构及对该数据的操作都封装在类里面来实现相应的功能。 10.常量 C++中用const关键字来定义常量,而Java中用static final来定义常量。 11.多重继承 在Java中用接口来解决多重继承所衍生的问题。 12.异常处理 在Java中提供了许多异常类供异常处理。 13.面向对象程序设计 在C++中,程序=对象1+对象2+对象3+……;而在Java中,程序=类1+类2+类3+……。 1.4 Java的工作原理与运行系统 1.4.1 Java的工作原理 Java采用半编译半解释的方式把高级语言源程序代码翻译成机器语言代码,为此,设计了一种称为字节码的代码。字节码(Bytecode)是一种和任何具体计算机环境无关的中间代码。在编写好以.java为后缀的Java源程序文件后,通过Java编译器翻译成扩展名为.class的字节码文件,然后,通过Java解释器把字节码翻译成机器码。由于此种翻译方式既有编译又有解释,所以称作半编译、半解释方式。过程如图1.2所示。 图1.2 Java的半编译半解释方式 Java的字节码运行在Java虚拟机上。Java虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,具有自己的堆栈、CPU等定义,可以在任何处理器上(无论是在计算机上还是在其他电子设备中)安全并且兼容地执行保存在.class文件中的字节码。 Java平台是一种运行在其他硬件平台上的纯软件平台,它有两个组件:Java虚拟机和Java应用程序编程接口(Java API)。JVM是Java平台的基础,Java API是预先建立的软件组件的集合,提供丰富的功能。 Java虚拟机的产生是为了跨平台的应用,任何具有Java虚拟机的计算机或电子设备上都可以运行字节码文件,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。Java的这种跨平台的性质也给程序执行的速度带来了一定的限制,由此引入即时编译器(Just In Time,JIT)内置于JVM中,在一定程度上加快了程序的执行速度。 但是,Java虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系统的种类。如图1.3所示,目前在SPARC结构、X86结构、MIPS PPC等嵌入式处理芯片上,以及在UNIX、Linux、Windows和部分实时操作系统上都有Java虚拟机的实现。 图1.3 Java虚拟机在计算机系统中的层次位置 1.4.2 Java的运行系统 Java的运行系统是各平台厂商对JVM的具体实现。对于Java中的两类程序:Java应用程序(Java Application)和Java小应用程序(Java Applet),存在两种不同类型的运行系统;对于Java Application,运行系统是Java解释器;而对于Java Applet,运行系统是指Java兼容的Web浏览器,该浏览器中包含了支持Applet运行的环境。 Java运行系统一般包括类装配器、字节码验证器、解释器、代码生成器和运行支持库。Java运行系统运行的是字节码,即.class文件。字节码的执行过程分为三步,如图1.4所示。 1.装入代码 由类装入器装入程序运行时需要的所有代码,其中包括程序代码中调用到的所有类。当装入了运行程序需要的所有类后,运行系统便可以确定整个可执行程序的内存布局。 2.验证代码 由字节码验证器进行安全检查,以确保代码不违反Java的安全性规则,同时字节码验证器还可发现操作数栈溢出,非法数据类型转换等多种错误。 3.执行代码 Java字节码的执行可以有以下两种方式: (1)即时编译方式:由代码生成器先将字节码编译为本机代码,然后再全速执行本机代码,这种运行方式效率高,执行速度约可提高25%。 (2)解释执行方式:解释器每次把一小段代码转换成本机代码并执行,如此往复完成Java字节码的所有操作。 图1.4 字节码的执行过程 1.5 Java开发运行环境的安装与配置 如果希望在计算机上运行Java程序,则必须安装JVM和Java运行时解释器,二者构成了Java程序的运行环境。Sun公司为Java程序员免费提供了Java的软件开发工具包(Java2 Software Develop Kit,Java2 SDK,J2SDK,JDK),它包含了所有编译、运行Java程序所需要的工具,JDK还包含了Java运行环境以及可以供用户调用的应用程序编程接口(API)。JDK和帮助文档可在Sun公司的网站http://java.sun.com上免费下载到最新版本,也可查看其最新的信息。本节介绍DOS环境下的Java开发运行环境JDK,Java集成开发运行环境Jbuilder、Jcreator等读者可参考其他书籍学习。 1.5.1 安装JDK 以Windows平台的JDK安装为例,下载的安装程序是一个自解压的jdk-1_5_0_08-windows-i586-p.exe文件,执行该程序就可在Windows上开始安装。安装过程比较简单,当出现图1.5所示的对话框时,单击“更改”按钮可以更改安装目录。还可根据实际需要选择JDK的安装部件,默认情况下,向导安装所有的JDK组件。 图1.5 JDK安装组件和目录选择对话框 以下是对安装组件的说明: 开发工具:Java的开发工具包,用来编译、运行和打包Java程序。 演示程序:提供大量值得研究的Java示例程序,建议安装此部件。 源代码:此组件提供Java类库的源码,展示了Java的一些核心技术。 公共JRE:公用的Java运行时环境组件,选择此组件,将在浏览器中安装最新的Java插件,使浏览器支持最新的Java类库。 安装成功后,在JDK文件夹下有bin、demo、include、jre、lib、sample等子文件夹,下面是对子文件夹的说明: bin:包含编译器、解释器、小应用程序浏览器等可执行文件。 demo:包含源代码的程序示例。 include:存放本地文件(Windows系统下是一些C语言头文件)。 lib:保存了Java的类库文件。 jre:存放运行时的文件。 1.5.2 安装Java帮助文档 JDK帮助文档是重要的编程手册,可帮助读者学习JDK的使用方法和完整地掌握JDK所有方面的内容。JDK的安装程序中并不包含帮助文档,因此也必须从Sun公司的网站上下载进行安装,JDK帮助文档在JDK的下载页面也有下载链接。下载压缩文件jdk-1_5_0-doc.zip,解压缩后通常安装在JDK所在目录的docs子目录下面。用浏览器打开docs子目录下的index.html文件就可以阅读所有的帮助文档,如图1.6所示。 图1.6 JDK帮助文档主页 1.5.3 配置类路径 在安装完JDK之后,必须配置类路径classpath和环境变量path,JDK才能够正常运行。如果是在Windows 98中运行,则在C:\autoexec.bat文件的末尾添加下列语句: set classpath= .;d:\ program files\java\jdk1.5.0_08\lib; set path=%path%;d:\program files\java\jdk1.5.0_08\bin; set path语句设置了Java编译运行程序的路径。其中%path%表示保持系统原来的设置不变,d:\program files\java\jdk1.5.0_08为JDK安装路径。set classpath语句设置了Java包的路径,其中最前面的“.”表示当前目录总在类路径中。 如果是在Windows 2000/NT/XP中,则需要右击桌面上“我的电脑”图标,选择“属性”命令,会弹出一个名为“系统属性”的对话框,选择“高级”选项卡,如图1.7所示,然后单击“环境变量”按钮,弹出如图1.8所示的“环境变量”对话框,选中系统变量下的Path选项,单击“编辑”按钮,打开如图1.9所示的“编辑系统变量”对话框,在“变量值”文本框中添加或输入JDK开发工具包的路径。若在系统变量里没有Path选项,则单击“新建”按钮,弹出如图1.9所示的“编辑系统变量”对话框,在“变量名”文本框中输入Path,在“变量值”文本框中添加或输入JDK开发工具包的路径。 图1.7 “系统属性”对话框 图1.8 “环境变量”对话框 图1.9 “编辑系统变量”对话框 classpath的设置步骤和Path设置完全类似,在此不再赘述。 在Windows 95和Windows 98操作系统下,设置了系统环境变量后,必须重新启动计算机,以使新的设置值被加载。 1.6 简单的Java程序 Java程序分为两类:一类是可以独立运行的Java应用程序(Java Application);另一类是Java小应用程序(Java Applet),这类程序实现的功能相对简单些,规模小,它不能独立运行,必须嵌入到Web页面中,由与Java兼容的浏览器控制运行。下面分别介绍这两类程序的结构和运行过程。 1.6.1 Java应用程序 【例1.1】 从键盘上输入圆的半径,求圆的周长和面积。 /** *从键盘上输入圆的半径,求圆的周长和面积 */ public class PerimeterAreaOfCircle { final static double PI=3.1415926; // 定义常量PI public static void main(String[]args) { double r,perimeter,area; r=Double.parseDouble(args[0]); /* 从命令行读入的字符串args[0]转换为实型dobule,Double是系统提供的一个类, parseDouble()是其中的一个方法,用于实现字符串转换为double */ perimeter=2*PI*r; area=PI*r*r; System.out.println("圆的周长为:"+perimeter); // 实现字符串的输出 System.out.println("圆的面积为:"+area); } } 使用文字处理软件如UltraEdit、记事本等编辑上述代码,并把它保存到一个名为PerimeterAreaOfCircle.java(注意大小写)的文件中,用编译器javac.exe对它进行编译,如图1.10所示。若编译没有错误,将生成字节码文件PerimeterAreaOfCircle.class;若有错误,则回到编辑状态修改源文件,然后保存再重新编译。用解释器java.exe来运行该字节码文件得到如图1.10所示的结果。注意,运行程序时不要用扩展名.class。Java解释器将命令的第一个参数当作文件名,将其加上扩展名.class后再执行。如果命令行参数用PerimeterAreaOfCircle.class,它会扩展为PerimeterAreaOfCircle.class.class。 程序解析: (1)Java注释分为以下3种: ① 单行注释:从“//”开始到本行结束的内容都是注释。 ② 多行注释:在“/*”和“*/”之间的所有内容都是注释。 图1.10 编译Java源程序和运行Java字节码文件得到的结果 ③ 文档注释:在注释方面Java提供了一种C/C++所不具有的文档注释方式。在“/**”和“*/”之间的文本,将自动包含在用javadoc命令生成的HTML格式的文档中。javadoc是JDK中API文档生成器。该工具解析一组Java源文件中的声明与文档注释,生成一组HTML页面描述这些源程序中定义的类、内部类、接口、构造方法、方法、属性等。JDK的API文档就是用javadoc工具生成的。 (2)Java区分大小写,包括文件名。 (3)class关键字用来声明一个类,关键字public表示它是一个公共类,一个Java源程序最多只能有一个公共类。类定义体由一对{}括起来。 (4)Java语句均以半角的分号“;”结尾。 (5)类体内包含变量和函数的定义,变量称为类的“成员变量”,函数在Java中称为“方法”。 (6)在该类中定义了一个main方法,其中public表示访问权限,指明所有的类都可以使用这一方法。static指明该方法是一个类方法(又称为静态方法),它可以通过类名直接调用;void则指明main方法不返回任何值。对于一个应用程序来说,main方法是必需的,而且必须按照上述格式来定义。Java解释器在没有生成任何实例的情况下,以main方法作为入口来执行程序。 (7)Java程序中可以定义多个类,每个类中可以定义多个方法,但是最多只能有一个公共类,main方法也只能有一个。main方法定义中,String[]args是传递给main方法的参数,参数名为args,它是String类的一个实例,参数可以为一个或多个,多个参数间用逗号分隔。 (8)语句System.out.println("圆的周长为:"+perimeter);的作用是调用系统类库中的System类的成员out的println方法实现字符串的输出。与println不同的是:print方法在当前行输出,而println方法在新的一行输出。 (9)Java源程序结构。 一个完整的Java源程序应该包括下列部分: package语句;// 包声明语句,该部分至多只有一句,必须放在源程序的第一句 import语句; /* 引入类的声明语句,该部分可以有若干import语句或者没有,必须放在所有 的类定义之前 */ public classDefinition;// 公共类定义部分,至多只有一个公共类的定义         // Java规定Java源程序的文件名必须与该公共类名完全一致 classDefinition; // 类定义部分,可以有零个或者多个类定义 interfaceDefinition; // 接口定义部分,可以有零个或者多个接口定义 import语句:如果在源程序中用到了除java.lang这个包以外的类,无论是系统的类还是自己定义的包中的类,都必须用import语句标识,以通知编译器在编译时找到相应的类文件。 (10)源文件的命名规则:如果在源程序中包含有公共类的定义,则该源文件名必须与该公共类的名字完全一致,字母的大小写都必须一样。这是Java的一个严格的规定,如果不遵守,在编译时就会出错。因此,在一个Java源程序中至多只能有一个公共类的定义。如果源程序中不包含公共类的定义,则该文件名可以任意取名。如果在一个源程序中有多个类定义和接口定义,则在编译时将为每个类生成一个.class文件(每个接口编译后也生成.class文件)。 1.6.2 Java小应用程序 我们用一个简单的例子讨论Java Applet程序的编辑、编译、网页文件的编辑和浏览器浏览网页的过程。 【例1.2】 设计一个显示“Hello World!”字符串的Java Applet程序,并用浏览器浏览网页,过程如下: (1)编辑如下的Java Applet源程序代码,文件名为HelloWorldApplet.java。 import java.awt.Graphics; import java.applet.Applet; public class HelloWorldApplet extends Applet { public String s; public void init() { s=new String("Hello World!"); } public void paint(Graphics g) { g.drawString(s,25,25); // 在浏览器中坐标为(25,25)的位置显示字符串s } } 程序解析:所有的Java Applet程序都是Applet类的子类,Java Applet程序是从init方法开始执行的。paint方法继承于其祖先类Component,在Component第一次被显示或重画时调用该方法,其参数Graphics是被显示的对象。 (2)编译Java Applet程序。 使用javac.exe编译Java Applet源程序代码,生成名为HelloWorldApplet.class的字节码文件。如果给出错误信息,则需要重复编辑和编译过程,直到程序没有错误、编译成功为止。 (3)编辑HTML网页文件。 Java Applet Example

Java小应用程序

把上面的代码保存为文件index.html,该文件名不受限制,合法的文件名即可。在HTML文件中嵌入Java小应用程序,使用标签,该标签包含如下几个参数: CODE=HelloWorldApplet.class:指定要嵌入的Java Applet字节码文件名,可以省略扩展名。由于Java采用半编译、半解释的方式,所以这里实际嵌入的是编译后的扩展名为.class的字节码文件。 WIDTH=300:指定Java Applet所占浏览器页面的宽度,以像素为单位。 HEIGHT=300:指定Java Applet所占浏览器页面的高度,以像素为单位。 (4)运行网页文件。 有两种方式可以运行Java小应用程序: ① 使用Appletviewer.exe小应用程序运行命令。 在命令行下面输入appletviewer index.html,运行结果如图1.11所示。 图1.11 使用appletviewer的运行结果 ② 直接在浏览器中打开index.html程序,在主流的浏览器如IE、Netscape中都包含有Java虚拟机,负责解释执行Java Applet程序。使用IE浏览器显示结果如图1.12所示。 图1.12 使用IE浏览器打开Java小应用程序的运行结果 14 Java程序设计教程与实验 13 第1章 Java概述