C:\>java server 参数xxxx 参数1 参数2 怎么在java代码中得到后面的“参数1” “参数2”

当前位置: >>
经典JAVA教程(入门到精通)(1)
Java实用教程 全 新计 算 机 应 用 技 术 丛 书JavaJava实用教程薛 亮 编著西安电子科技大学出版社
Java实用教程目 录第1章 Java环境及配置 第2
章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 Java数据库技术 第10章 Java安全技术 第11章 Java网络技术(一) 第12章 Java网络技术(二) 第13章 Servlet技术 第14章 Java读写XML技术 Java实用教程第1章Java环境及配置1.1 Java概述1.2 Java语言的特点 1.3 Java应用分类 1.4 JDK包的下载与安装 1.5 Java环境配置 1.6 例子程序 习 题 Java实用教程1.1 Java 概 述Java是一种编程语言,它提供了一个同时用于程序开发、 应用和部署的环境。Java语言主要定位于网络编程,使得程 序可以最大限度地利用网络资源。 Java实用教程1.2 Java 语 言 的 特 点1. 跨平台性 所谓的跨平台性,是指软件可以不受计算机硬件和操作系 统的约束而在任意计算机环境下正常运行。这是软件发展的趋 势和编程人员追求的目标。之所以这样说,是因为计算机硬件 的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。 Java实用教程 而在Java语言中,Java自带的虚拟机很好地实现了跨平台 性。Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被Java虚拟机识别的一种机器码指令。Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使 得Java语言具备跨平台性。 Java实用教程 2. 面向对象 面向对象是指以对象为基本粒度,其下包含属性和方法。 对象的说明用属性表达,而通过使用方法来操作这个对象。面 向对象技术使得应用程序的开发变得简单易用,节省代码。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等。 Java实用教程 3. 安全性 安全性可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性。语言级安全性指Java的数据结构是完整的对象,这些封装过的数据类型具有安全性。编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。运 行时Java类需要类加载器载入,并经由字节码校验器校验之后 才可以运行。Java类在网络上使用时,对它的权限进行了设置, 保证了被访问用户的安全性。 Java实用教程 4. 多线程 多线程在操作系统中已得到了最成功的应用。多线程是指 允许一个应用程序同时存在两个或两个以上的线程,用于支持 事务并发和多任务处理。Java除了内置的多线程技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程。 Java实用教程 5. 简单易用 Java源代码的书写不拘泥于特定的环境,可以用记事本、 文本编辑器等编辑软件来实现,然后将源文件进行编译,编译 通过后可直接运行,通过调试则可得到想要的结果。 Java实用教程1.3 Java 应 用 分 类1. 应用程序 典型的通用程序可以在具备Java运行环境的设备中独立运 行,它又分为: GUI应用程序:即图形用户界面程序,可实现丰富的输入 界面和输出显示。 命令行程序:无需界面,只需在命令行下运行,运行结果 只在后台发生变化,可以将输出存放到文件中。嵌入式应用程序:Java语言的平台独立性决定了它可以嵌 入到不同的设备中,且只需具备必要的运行环境即可。 Java实用教程 2. Servlets服务器端应用程序 服务器端的应用程序用来收集客户端的数据输入,对数据 进行处理之后,返回相应的响应给客户。它主要用来实现与客 户端的交互。 Java实用教程 3. Applets小应用程序 Applets应用于网络上,嵌入在HTML网页中,支持Java的 浏览器都可以对它进行解释并运行。通常通过一个HTML标签 &APPLET&&/ APPLET &来识别并运行Applets。小应用程序的类在服务器端,当浏览器显示网页时,它随之下载到本地,由本地的浏览器载入运行。 Java实用教程1.4 JDK包的下载与安装Java Develop Kit简称为JDK,是Sun公司免费发行的软件包,可以从Sun网站免费下载,也可以从其它国内地址下载。JDK版本从1.02开始,目前版本发展到1.4,其中 高级版本对低级版本实现向下兼容。运用这个软件包,就可以对Java源程序进行编译和运行。本书中下载使用的JDK包为j2sdk-1_4_0_012-windows-i586.exe。 下载后双击图标,即可进 行安装,默认的安装目录为C:\j2sdk1.4.0_01。本书作者将安装 目录改为D:\j2sdk1.4.0_01。 Java实用教程1.5 Java 环 境 配 置JDK包安装完成后,需要设置环境变量。用鼠标右键单击桌面上的图标“我的电脑”,选择“属性”项,出现标题为“系统特性”的对话框,点击“高级”标签,可以看见有一个 “环境变量”按钮,如图1.1所示。 Java实用教程图1.1 “系统特性”对话框 Java实用教程 单击“环境变量”按钮,可以看见本机环境变量,如图1.2 所示。上面为用户变量,下面为系统变量,随着操作系统或用户环境的不同,变量名、值有所不同。这里需要修改三个用户变量: include、lib和path,分别将JDK包安装之后的相应路径包含到这 三个用户变量中。 Java实用教程图1.2 “环境变量”对话框 Java实用教程 选中include变量,单击“编辑”按钮,弹出标题为“编辑 用户变量”的对话框,如图1.3所示。在变量值一栏的最后添加“; D:\j2sdk1.4.0_01\include”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的include目录。图1.3为作者修 改include变量的情况,注意你的安装路径可能与作者的有所不 同,要以你的安装路径为基准进行修改。 Java实用教程图1.3 编辑include变量 Java实用教程 选中lib变量,单击“编辑”按钮,弹出标题为“编辑用户 变量”的对话框,如图1.4所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\lib”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的lib目录。图1.4为作者修改lib变量的 情况,注意你的安装路径可能与作者的有所不同,要以你的安 装路径为基准进行修改。 Java实用教程图1.4 编辑lib变量 Java实用教程 选中path变量,单击“编辑”按钮,弹出标题为“编辑用 户变量”的对话框,如图1.5所示。在变量值一栏的最后添加“; D:\j2sdk1.4.0_01\bin”,“;”表示与前面的各项隔开,后面的路 径是JDK包的安装路径下的bin目录。图1.5为作者修改path变量的情况,注意你的安装路径可能与作者的有所不同,同样要以你的安装路径为基准进行修改。 Java实用教程图1.5 编辑path变量 Java实用教程1.6 例 子 程 序【例1.1】源程序名称为HelloWorld.java,命令行提示符下输 出字符串“Hello World”。源代码如下: //程序文件名称为HelloWorld.java public class HelloWorld{public static void main(String args[]) { System.out.println(&Hello World&); }} Java实用教程 用记事本或者专用的编辑工具如EditPlus等进行编辑,并将 文件存为HelloWorld.java。建议使用像EditPlus这样的编辑软件, 可使得代码更加清晰且风格良好。运行“开始”菜单→程序→附件→命令提示符,载入命令 行程序,在命令行状态下,进入源程序所在的目录,图1.6所示 的例子程序的目录在“E:\_Work\Java\sample”下,然后键入命令 “javac HelloWorld.java”。若编译不通过,会产生错误提示。若 编译通过,则没有任何提示,同时进入命令行等待状态,如图 1.6所示。这时,命令行虽然没有提示,但在源程序的路径下生 成一个新的文件为HelloWorld.class。这个.class文件就是编译后 生成的类文件,运行此文件,需在命令行状态中键入命令“java HelloWorld”,然后按回车键,此时程序就会运行并输出“Hello World”。输出完毕,立即退出程序,进入命令行等待状态,如 图1.7所示。 Java实用教程图1.6 编译源程序HelloWorld Java实用教程图1.7 运行HelloWorld应用程序 Java实用教程这里用到的命令Javac和Java都是JDK软件包自带的。从JDK安装路径的bin目录下可以看到javac.exe,这是编译程序, 源程序编译通过后就生成.class文件;而Java.exe就是载入类的 运行程序,运行时根据源程序的指令要求产生正确的输出或结 果。如果没有进行环境配置,直接编译或者运行Java源程序,系统会提示找不到这些命令,所以必须进行环境配置后再使用。 Java实用教程 【例1.2】小应用程序的例子。输出“Hello World!”,如 图1.8所示。源程序代码如下://程序文件名称为HelloApplet.javaimport java.awt.Gimport java.applet.A public class HelloApplet extends Applet { public void paint (Graphics g ) { g.drawString (&Hello World!&,50,25); }} Java实用教程小应用程序代码书写和编译完成后,无法独立运行,需要一个载体或者容器。下面的HTML网页代码就是小应用程序载 入的容器。&!-程序文件名称为HelloApplet.html --& &HTML& &HEAD& &TITLE&HTML Test Page&/TITLE& &/HEAD& Java实用教程&BODY& HelloApplet will appear below in a Java enabled browser.&BR& &APPLET CODEBASE = &.& CODE = &HelloApplet.class& NAME = &TestApplet& WIDTH = 400 HEIGHT = 300 HSPACE = 0 VSPACE = 0 ALIGN = middle & &/APPLET& &/BODY& &/HTML& Java实用教程图1.8 Applet显示“Hello World!” Java实用教程习 题1. 简述Java的特点。 2. 简述Java的分类情况。 3. 进行Java环境的安装和配置。 4. 编写应用程序,屏幕上输出“欢迎来到Java世界!”。 5. 编写Applet,输出“欢迎来到Java世界!”。 Java实用教程第2章 Java基本语法2.1 Java程序的构成 2.2 数据类型、变量和常量2.3 运算符和表达式2.4 流程控制 2.5 数组的使用 习 题 Java实用教程2.1 Java程序的构成2.1.1 逻辑构成 Java源程序逻辑构成分为两大部分:程序头包的引用和类 的定义。1. 程序头包的引用主要是指引用JDK软件包自带的包,也可以是自己定义的类。 引用之后程序体中就可以自由应用包中的类的方法和属性等。 Java实用教程 2. 类的定义 Java源程序中可以有多个类的定义,但必须有一个主类,这个主类是Java程序运行的入口点。在应用程序中,主类为包含main方法的类;在Applet中,主类为用户自定义的系统Applet 类的扩展类。在Java源程序中,主类的名字同文件名一致。 类的定义又包括类头声明和类体定义。类体中包括属性声 明和方法描述。下面来看一个例子,其中斜体表示的语句行为 主类类头,主类类头下面从大括号“{”开始到“}”结束的部分 称为主类类体。 Java实用教程 【例2.1】下面是一个应用程序,也是一个Applet,既可以 在命令行下运行,也可以嵌入到HTML网页中用appletviewer命 令运行。运行时在界面上的第一个文本框中输入你的名字,按 回车键后,在第二个文本框中会显示“XXX,欢迎你来到Java世界!”,运行结果如图2.1所示。//程序文件名称为WelcomeApplet.java 注释语句import java.apple t.*; ? ? import java.awt.* ; ? 引入包 import java.awt.e vent.*;? ?public class WelcomeApplet extends Applet implements ActionListener 主类类头 { Java实用教程Label lblN ? ? TextField txtN? 属 性 TextField txtD ? ?public void init() ? ? { ? lblNam e ? new Label( 请输入您的名字& );? & ? txtN am e ? new TextField(8); ? txtD isp ? new TextField(20); ? ? init方法 add(lblName); ? ? add(txtName); ? add(txtDisp); ? ? txtN am e.addAct ionListener(this); ? } ? Java实用教程public void actionPerf orm ed(Acti onEvent e) ? ? { actionPerformed 方法 txtD isp.setText(txtNam e. getText() ? & 欢迎你来到Java世界& );? ? ? ? Java实用教程public static void m ain(String args[]) ? ? { ? Fram ef ? new Frame( 欢迎& ); & ? ? f.addWindowListener(new WindowAdap ter()){ ? public void windowClosing(WindowEvent evt) ? ? { ? Sy stem.exi t(0); ? ? } ? ? } ? main主方法 ? ; ? Welcom eApp a ? new Welcom eApp let let(); ? ? a.init(); ? f.add(&Center&, a); ? ? f.setSize(400,300); ? f.show(); ? ? a.start(); ? ? } ? Java实用教程图2.1 程序界面 Java实用教程 2.1.2 物理构成 Java源程序物理上由三部分构成,分别为语句、块和空白。 (1) 语句指一行以分号“;”结束的语句。 (2) 块指用括号对{}界定的语句序列,块可以嵌套使用。 (3) 空白指语句之间、块内部或者块之间的空白行。空白 不影响Java源程序的编译和运行,适当地运用空白,可以形成 良好的代码风格。 Java实用教程 在例1.1中, Label lblN TextField txtN TextField txtD 都是语句,而 { lblName = new Label(&请输入您的名字:&); txtName = new TextField(8); txtDisp = new TextField(20); add(lblName); add(txtName); add(txtDisp); txtName.addActionListener(this); } 是块,语句之间、块之间或块内部的空行都为空白。 Java实用教程2.1.3 注释语句注释语句主要用来进行一些说明,或者标记一些无用的程 序语句。有两种注释方法,行注释为以//开始的行;块注释以/* 开始和*/结束,Java编译器忽略注释后的程序语句或说明。 例如,下面的语句就是注释语句用来说明程序文件名称的。//程序文件名称为WelcomeApplet.java 上述的语句注释可以更改为: /*程序文件名称为WelcomeApplet.java*/ 或/*程序文件名称为 WelcomeApplet.java*/ Java实用教程 2.1.4 标识符、关键字和转义符在Java语言中,标识符是赋予变量、类和方法等的名称。标识符由编程者自己指定,但需要遵循一定的语法规范:(1) 标识符由字母、数字、下划线(_)、美元符号($)组成,但美元符号用得较少。 (2) 标识符从一个字母、下划线或美元符号开始。 (3) Java语言中,标识符大小写敏感,必须区别对待。 (4) 标识符没有最大长度的限制,但最好表达特定的意思。 (5) 标识符定义不能是关键字。 Java实用教程 关键字又称保留字,是指Java语言中自带的用于标志数据 类型名或者程序构造名等的标识符,如public、double等。 转义符是指一些有特殊含义的、很难用一般方式表达的字 符,如回车、换行等。所有的转义符以反斜线(\)开头,后面跟 着一个字符来表示某个特定的转义符,如表2.1所示。 Java实用教程 表2.1 转 义 符引 用 方 法 \b \t \n \f \r \' \& \\含 退格 水平制表符 Tab 换行 表格符 回车 单引号 双引号 反斜线义 Java实用教程2.2 数据类型、变量和常量2.2.1 数据类型 Java编程语言定义了八种基本的数据类型(见表2.2),共分为 四类:整数类(byte、short、int、long)、文本类(char)、浮点类 (double、float)和逻辑类(boolean)。 Java实用教程表2.2 Java的数据类型分 类 数据类型 字节型 短整型 整型 长整型 字符型 浮点型 双精度型 逻辑型 关键字 byte short int long char float double boolean 占字节数 8 16 32 64 16 32 64 8 缺省数值 0 0 0 0 ′\u 0000′ 0.0F 0.0D False 取 值 范 围 -2 ~2 7-1 -2 15~2 15-1 -2 31~2 31-1 -2 63~2 63-1 ′\u 0000′ ~ ′\u FFFF′ ― ―7整数类 文本类 浮点类 逻辑类True、False Java实用教程 1. 整数类 (1) 采用三种进制――十进制、八进制和十六进制。2 ―― 十进制值是2;077 ―― 首位的0表示这是一个八进制的数值;0xBAAC ―― 首位的0x表示这是一个十六进制的数值。(2) 具有缺省int。(3) 用字母“L”和“l”定义long。(4) 所有Java编程语言中的整数类型都是带符号的数字。 Java实用教程 2. 文本类 (1) 代表一个16 bit Unicode字符。(2) 必须包含用单引号(' ')引用的文字。(3) 使用下列符号:'a'――一个字符。'\t'--一个制表符。 '\u???? '--一个特殊的Unicode字符,????应严格使用四个十 六进制数进行替换。 Java实用教程 3. 浮点类 默认为double类型,如果一个数字包括小数点或指数部分, 或者在数字后带有字母F或f(float)、D或d(double),则该数字为 浮点数。 Java实用教程 4. 逻辑类 boolean数据类型有两种值:true和false。 例如:boolean flag = 上述语句声明变量flag为boolean 类型,它被赋予的值为true。 Java实用教程 2.2.2 变量与常量 常量是指整个运行过程中不再发生变化的量,例如数学中 的π= 3.1415……,在程序中需要设置成常量。而变量是指程序 的运行过程中发生变化的量,通常用来存储中间结果,或者输出临时值。变量的声明也指变量的创建。执行变量声明语句时,系统根据变量的数据类型在内存中开辟相应的存储空间并赋予初始值。变量有一个作用范围,超出它声明语句所在的块就无效。 Java实用教程 下面看一个使用各种类型变量声明并改变的示例。程序中pi 为常量,s1、i1、l1、ch1、f1、d1、b1为全局变量,可以在方法 change中发生改变,然后在方法main中输出。而s2、i2、l2、ch2、 f2、d2、b2是方法main的局部变量,它们的作用范围只局限于方 法main中。 【例2.2】测试不同数据类型的变量,程序输出如图2.2所示。 源程序代码如下: //程序文件名称为SetVariable.javapublic class SetVariable{ //全局变量 Java实用教程 static double pi = 3.;//数学常量 static short s1; static int i1; static long l1;static char ch1;static float f1; static double d1; static boolean b1; public static void main(String args[]){ Java实用教程//局部变量short s2 = 35; int i2 = -32; long l2 = 34555L; char ch2 = 'A';float f2 = 897.89F;double d2 = 34.345; boolean b2 = //输出常量 System.out.println(&数学常量pi = & + pi); //输出局部变量 Java实用教程 System.out.println(&******局部变量******&); System.out.println(&短整型变量s2 = & + s2);System.out.println(&整型变量i2 = & + i2);System.out.println(&长整型变量l2 = & + l2);System.out.println(&字符变量ch2 = & + ch2);System.out.println(&浮点数类型f2 = & + f2); System.out.println(&双精度型变量d2 = & + d2); System.out.println(&布尔型变量b2 = & + b2); //调用方法修改全局变量的值 Java实用教程change();//输出全局变量的值 System.out.println(&******全局变量******&); System.out.println(&短整型变量s1 = & + s1); System.out.println(&整型变量i1 = & + i1);System.out.println(&长整型变量l1 = & + l1);System.out.println(&字符变量ch1 = & + ch1); System.out.println(&浮点数类型f1 = & + f1);System.out.println(&双精度型变量d1 = & + d1);System.out.println(&布尔型变量b1 = & + b1); } Java实用教程//方法:修改全局变量的值public static void change() { s1 = 125; i1 = 88; l1 = L; ch1 = 'B'; f1 = 3.2590F; d1 = -1.04E-5; b1 = }} Java实用教程图2.2 变量输出结果 Java实用教程2.3 运算符和表达式Java常用的运算符分为五类:算术运算符、赋值运算符、关系运算符、布尔逻辑运算符、位运算符。位运算符除了简单的按位操作外,还有移位操作。按位操作返回布尔值。 表达式是由常量、变量、对象、方法调用和操作符组成的 式子。表达式必须符合一定的规范,才可被系统理解、编译和 运行。表达式的值就是对表达式自身运算后得到的结果。 根据运算符的不同,表达式相应地分为以下几类:算术表 达式、关系表达式、逻辑表达式、赋值表达式,这些都属于数值表达式。 Java实用教程2.3.1 算术运算符及算术表达式Java中常用的算术运算符如下: + * 加运算符 减运算符 乘运算符/%除运算符取模运算(除运算的余数)++--增量运算符减量运算符 Java实用教程 【例2.3】测试运算符及表达式,程序输出如图2.3所示。源 程序代码如下://程序文件名称为NumberOper.javapublic class NumberOper{ public static void main(String args[]){//变量初始化 int a = 30;int b = 20;//定义结果变量 int r1,r2,r3,r4,r5,r6,r7,r8,r9; //计算结果 r1 = a + Java实用教程 r2 = a-b; r3 = a * r4 = a / r5 = a % r6 = a ++; r7 = b--; r8 = ++ r9 = -- //输出结果 System.out.println(&a = & + a + & b = & + b); //a,b的值System.out.println(&a+b = & + r1);System.out.println(&a-b = & + r2); Java实用教程System.out.println(&a*b = & + r3);System.out.println(&a/b = & + r4);System.out.println(&a%b = & + r5);System.out.println(&a++ =& + r6); System.out.println(&b-- =& + r7); System.out.println(&++a =& + r8); System.out.println(&--b =& + r9); } } Java实用教程图2.3 程序输出结果 Java实用教程 2.3.2 关系运算符 关系运算符用于比较两个数据之间的大小关系,关系运算 表达式返回布尔值,即“真”或“假”。Java中的常用关系运 算符如下: == 等于!=& & &= &=不等于大于 小于 大于等于 小于等于 Java实用教程 【例2.4】编写程序,测试关系运算符及其表达式,程序输 出如图2.4所示。源程序代码如下: //程序文件名称为TestRelation.java public class TestRelation { public static void main(String args[]) { //变量初始化 int a = 30; int b = 20; //定义结果变量 boolean r1,r2,r3,r4,r5,r6; //计算结果 Java实用教程 r1 = a == r2 = a != r3 = a & r4 = a & r5 = a &= r6 = a &= //输出结果 System.out.println(&a = & + a + & b = & + b); System.out.println(&a==b = & + r1); System.out.println(&a!=b = & + r2); System.out.println(&a&b = & + r3); System.out.println(&a&b = & + r4); System.out.println(&a&=b = & + r5); System.out.println(&a&=b = & + r6); } } Java实用教程图2.4 程序输出结果 Java实用教程2.3.3 布尔逻辑运算符表2.3 布尔运算符及规则运算符 ! & | ^ && || 含 义 取反 非简洁与 非简洁或 异或 简洁与 简洁或 !a a&b a|b a ^b a && b a || b 示 例 规 则a 为真时,结果为假;a 为假时,结果为真 a、b 都为真时,结果为真;a、b 有一个为假时,结果为假 a、b 有一个为真时,结果为真;a、b 都为假时,结果为假 a、b 不同真假时结果为真;a、b 同真或同假时,结果为假 a、b 都为真时,结果为真;a、b 有一个为假时,结果为假 a、b 有一个为真时,结果为真;a、b 都为假时,结果为假 Java实用教程 图2.3为布尔逻辑运算符及其规则示例等。其中简洁与和简 洁或的执行结果分别与非简洁与和非简洁或的执行结果是一致 的,不同在于简洁与检测出符号左端的值为假时,不再判断符 号右端的值,直接将运算结果置为假;而简洁或与非简洁或的 不同在于简洁或检测出符号左端为真时,不再判断符号右端的 值,直接将运算结果置为真。 例如: Boolean a = Boolean b = a && b检测到a为假,则无需判断b的值,直接将值置为假; 而b || a时检测到b为真,则无需判断a的值,直接将值置为真。 Java实用教程【例2.5】测试布尔表达式,程序输出结果如图2.5所示。源 程序代码如下://程序文件名称为TestLogic.javapublic class TestLogic{ public static void main(String args[]) { //变量初始化 boolean a = boolean b = //定义结果变量 boolean r1,r2,r3,r4,r5,r6; //计算结果 Java实用教程r1 = !a; r2 = a & r3 = a | r4 = a ^ r5 = a && r6 = a || //输出结果 System.out.println(&a = & + a + & b = & + b); System.out.println(&!a = & + r1); System.out.println(&a&b = & + r2); System.out.println(&a|b = & + r3); System.out.println(&a^b = & + r4); System.out.println(&a&&b = & + r5); System.out.println(&a||b = & + r6);} } Java实用教程图2.5 程序输出结果 Java实用教程2.3.4 位运算符Java中的常用位运算符如下: ~ 位求反&| ^ && &&按位与按位或 按位异或 左移 右移&&&不带符号右移右移运算符对应的表达式为x&&a,运算的结果是操作数x被 2的a次方来除,左移运算符对应的表达式为x&&a,运算的结果 是操作数x乘以2的a次方。 Java实用教程【例2.6】测试位运算符&&和&&,程序输出结果如图2.6所示。 源程序代码如下://程序文件名称为TestBit.javapublic class TestBit{ public static void main(String args[]) { //变量初始化int a = 36;int b = 2; //定义结果变量 int r1,r2; Java实用教程 //计算结果 r1 = a &&r2 = a &&//输出结果System.out.println(&a = & + a + & b = & + b);System.out.println(&a&&b = & + r1); System.out.println(&a&&b = & + r2); } } Java实用教程图2.6 程序输出结果 Java实用教程 2.3.5 赋值运算符赋值运算符分为简单运算符和复杂运算符。简单运算符指“=”,而复杂运算符是指算术运算符、逻辑运算符、位运算符 中的双目运算符后面再加上“=”。表2.4列出Java常用的赋值运 算符及其等价表达式。 Java实用教程 表2.4 赋值运算符及其等价表达式运算符 += 含 义 加并赋值运算符 减并赋值运算符 乘并赋值运算符 除并赋值运算符 取模并赋值运算符 与并赋值运算符 或并赋值运算符 或并赋值运算符 左移并赋值运算符 右移并赋值运算符 右移并赋值运算符 示 例 a += b a-= b a *= b a /= b a %= b a &= b a |= b a ^= b a &&= b a &&= b a &&&= b 等价表达式 a=a+b a = a -b a=a*b a=a/b a=a%b a=a&b a=a|b a =a ^b a = a && b a = a && b a = a &&& b-=*= /= %= &= |= ^= &&= &&= &&&= Java实用教程 2.3.6 其它操作符及其表达式三目运算符(?:)相当于条件判断,表达式x?y:z用于判断x是否为真,如果为真,表达式的值为y,否则表达式的值为z。 例如: int x = 5;int a = (x&3)?5:3;则a的值为5。如果x = 2,则a的值为3。 Java实用教程对象运算符(instanceof)用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假 (false)。 例如: boolean b = userObject instanceof Applet 用来判断userObject类是否是Applet类的实例。 Java实用教程 2.3.7 优先级 表2.5 运算符优先级优先级 1 2 3 4 5 6 7 8 9 10 11 12 13 14 含义描述 分隔符 单目运算、字符串运算 算术乘除运算 算术加减运算 移位运算 大小关系运算、类运算 相等关系运算 按位与,非简洁与 按位异或运算 按位或,非简洁或 简洁与 简洁或 三目条件运算 简单、复杂赋值运算 [] () ; , ++ -- + * / % 运 算 ! 符 结合性 *右到左 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 *右到左 *右到左-~(类型转换符)+ && && &&& & & &= &= instanceof == != & ^ | && || ?: = *= /= %= += - = &= ^= |=&&=&&=&&&= Java实用教程2.4 流 程 控 制流程控制分为三种基本结构:顺序结构、分支结构和循环 结构。顺序结构是指命令行顺序执行,这是最常见的一个格式; 分支结构是一种选择结构,根据条件的值选择不同的执行流程,可以得到不同的结果。分支结构包括单分支语句(if-else语句)和多分支语句(switch语句);循环结构是指对于一些重复执行的语 句,用户指定条件或次数,由机器自动识别执行。循环结构包 括次数循环语句(for语句)和条件循环语句(while语句)。 Java实用教程 2.4.1 分支语句 分支语句分为两类:单分支语句和多选语句。 1. if-else语句 if-else语句的基本格式为: if(布尔表达式) {语句或块1;} else{语句或块2; } Java实用教程 其中: (1) 布尔表达式返回值为true或false。 (2) 如果为true,则执行语句或块1,执行完毕跳出if-else语 句。 (3) 如果为false,则跳过语句或块1,然后执行else下的语句 或块2。 Java实用教程【例2.7】测试if-else语句,如果x&10,则输出x的值,并提 示结果正确,否则输出x= 10,提示结果不正确。程序输出结果 如图2.7所示。源程序代码如下: //程序文件名称为TestIf.javapublic class TestIf { //声明全局变量 public static void main(String args[]) { x = 12; if(x&10) { Java实用教程 System.out.println(&x = & + x + & 结果正确&);} elseSystem.out.println(&x = 10& + & 结果不正确&); change(); System.out.println(&修改x的值之后&); if(x&10) { System.out.println(&x = & + x + & 结果正确&); } else System.out.println(&x = 10& + & 结果不正确&); } Java实用教程 //change方法:修改x的值 public static void change() { x = 5; } } Java实用教程图2.7 程序输出结果 Java实用教程 2. switch语句 switch语句的基本格式为: switch(表达式1) { case 表达式2: 语句或块2; case表达式3: 语句或块3; case 表达式4: 语句或块4; default: 语句或块5; } Java实用教程 其中:(1) 表达式1的值必须与整型兼容。(2)? case分支要执行的程序语句。(3) 表达式2、3、4是可能出现的值。(4) 不同的case分支对应着不同的语句或块序列。(5)? break表示跳出这一分支。 Java实用教程 【例2.8】测试switch语句,当x=1、2、3时,分别打印1、2、 3,x不为这三个值时,打印x的值。程序输出结果如图2.8所示。 源程序代码如下: //程序文件名称为TestSwitch.java public class TestSwitch{public static void main(String args[]) //声明变量 x = 12; Java实用教程 System.out.println(&x=12时打印的值&); choose(x); x = 3; System.out.println(&x=3时打印的值&); choose(x);}//choose方法:switch语句结构 public static void choose(int x) { switch(x){ Java实用教程case 1:System.out.println(1);case 2:System.out.println(2); case 3: System.out.println(3); default: System.out.println(x); } }} Java实用教程图2.8 程序输出结果 Java实用教程 2.4.2 for循环语句 for循环语句实现已知次数的循环,其基本格式为: for(初始化表达式;测试表达式;步长) { 语句或块; } Java实用教程 其执行顺序如下: (1) 首先运行初始化表达式。 (2) 然后计算测试表达式,如果表达式为true,执行语句或 块;如果表达式为false,退出for循环。 (3) 最后执行步长。 Java实用教程 【例2.9】用for循环统计1~100(包括100)之间数的总和。程 序输出结果如图2.9所示。源程序代码如下://程序文件名称为TestFor.java public class TestFor { public static void main(String args[]) {int sum = 0;for(int i = 1; i&=100; i++) sum +=System.out.println(&1到100(包括100)的数的总和为:& + sum);} } Java实用教程图2.9 程序输出结果 Java实用教程 2.4.3 while循环语句 while循环语句实现受条件控制的循环,其基本格式为:while(布尔表达式){语句或块;}当布尔表达式为true时,执行语句或块,否则跳出while循环。 Java实用教程 上面for循环语句的例子改为while语句后如下所示: int sum = 0;int i = 1;while (i&=100) { sum += i++;}System.out.println(&1到100(包括100)的数的总和为:& + sum); Java实用教程 2.4.4 do语句 do语句实现受条件控制的循环,其基本格式为: do { 语句或块; } while(布尔表达式) Java实用教程 先执行语句或块,然后再判断布尔表达式。与while语句不 同,当布尔表达式一次都不为true时,while语句一开始判断就跳出循环,不执行语句或块,而在do语句中则要执行一次。上面那个例子改为do循环为: int sum = 0; int i = 1; do { sum += i++; } while (i&=100); System.out.println(&1到100(包括100)的数的总和为:& + sum); Java实用教程2.5 数 组 的 使 用2.5.1 数组声明 数组的定义如下: (1) 首先是一个对象。 (2) 存放相同的数据类型,可以是原始数据类型或类类型。 (3) 所有的数组下标默认从0开始,而且访问时不可超出定 义的上限,否则会产生越界错误。 Java实用教程数组声明时实际是创建一个引用,通过代表引用的这个名字来引用数组。数组声明格式如下: 数据类型 标识符[] 例如:int a[];//声明一个数据类型为整型的数组apencil b[];//声明一个数据类型为pencil类的数组b Java实用教程 2.5.2 创建数组 由于数组是一个对象,所以可以使用关键字new来创建一个数组,例如:a = new int[10];//创建存储10个整型数据的数组a b = new pencil[20];//创建存储20个pencil类数据的数组b 数组创建时,每个元素都按它所存放数据类型的缺省值被 初始化,如上面数组a的值被初始化为0,也可以进行显式初始 化。在Java编程语言中,为了保证系统的安全,所有的变量在 使用之前必须是初始化的,如果未初始化,编译时会提示出错。 有两种初始化数组的方式,分别如下: Java实用教程 (1) 创建数组后,对每个元素进行赋值。 a[0]=5; a[1]=4; ... a[9] = 10; (2) 直接在声明的时候就说明其值,例如: int a[] = {4,5,1,3,4,20,2}; 说明了一个长度为7的一维数组。 Java实用教程 【例2.10】编写程序测试数组,程序输出结果如图2.10所示。 源程序代码如下: //程序文件名称为TestArray.javapublic class TestArray{ public static void main(String args[]) { //声明数组 int a[]; char b[];//创建数组 Java实用教程 a = new int[3]; b = new char[2]; //数组初始化for (int i = 0; i&3; i++){ a[i] = i*3;}b[0] = 'a'; b[1] = 'b'; //快速初始化数组 int c[] = {0,1*3,2*3}; //输出结果 System.out.print(&数组a\n&); Java实用教程for (int i = 0; i&2; i++){ System.out.print(b[i] + & &); } System.out.print(&\n数组c\n&);for (int i = 0; i&3; i++){ System.out.print(c[i] + & &);}} } Java实用教程图2.10 程序输出结果 Java实用教程习 题1. 给出下列表达式的值。(1) 3++4&&2^-8(3) 36&&2*4&&48&&8/4+2(2) &abc&&123||8&&2(4) 2*4&&0&2||4%22. 编写程序,统计课程编号为、的平均成绩并输出。学生成绩表如图2.11所示。【每个课程编号的成绩用数组存储,读取时循环操作】 Java实用教程图2.11 习题2.2的成绩表 Java实用教程 3. 根据上题得出的考生平均成绩进行判断,如果在90分以 上,屏幕上输出“课程编号为XXXX的考生平均成绩为优”;在 80~90分之间输出“课程编号为XXXX的考生平均成绩为良”; 在70~80分之间输出“课程编号为XXXX的考生平均成绩为中”, 在60~70分之间输出“课程编号为XXXX的考生平均成绩为及格”;60分以下输出“课程编号为XXXX的考生平均成绩为不及格”。4. 编写程序,用数组实现乘法小九九的存储和输出。【提示:采用多个一维数组。】 Java实用教程第3章类和接口3.1 类 3.2 接口 3.3 常用数据结构及类习 题 Java实用教程3.1 类3.1.1 类的定义和声明 Java编程语言是面向对象的,处理的最小的完整单元为对 象。而现实生活中具有共同特性的对象的抽象就称之为类。类 由类声明和类体构成,类体又由变量和方法构成。下面给出一 个例子来看一下类的构成。【例3.1】自定义一个apple类,在主类SetApple中创建实例并调用方法,输出结果如图3.1所示。源程序代码如下: Java实用教程//程序文件名为SetApple.javapublic class SetApple{ public static void main(String[] args){apple a = new apple();//创建apple类 a.appleweight = 0.5;//实例变量赋值System.out.println(&苹果的重量为1两&);System.out.println(a.bite());//调用实例方法 a.appleweight = 5;System.out.println(&苹果的重量为5两&);System.out.println(a.bite()); } } Java实用教程//自定义类 class apple { //属性//对应苹果的颜色//苹果的重量//是否吃完 //类方法 public boolean bite() { if (appleweight&1) { System.out.println(&苹果已经吃完了!哈哈&); eatup = } Java实用教程else { System.out.println(&苹果吃不下了!:(&); eatup = }}} Java实用教程图3.1 自定义类的应用 Java实用教程 1. 类声明的基本格式 访问说明符 class 类名 extends 超类名 implements 接口名 其中: (1) 访问说明符为public或者缺省。public用来声明该类为公有类,可以被别的对象访问。声明为公有的类存储的文件名为类名。 (2) 类名:用户自定义的标识符,用来标志这个类的引用。 (3) 超类名:是指已经存在的类,可以是用户已经定义的, 也可以是系统类。 (4) 接口名:即后面讲到的接口。 Java实用教程 例如: public class HelloApplet extends Applet 访问说明符为public,类名HelloApplet,扩展类为JDK包 自带的java.applet.Applet类。由于public的存在,所以文件名 必须存为HelloApplet.java,同类名保持一致。 Java实用教程 2. 类体 类体包括成员变量和方法。(1) 成员变量:指类的一些属性定义,标志类的静态特征, 它的基本格式如下:访问说明符 数据类型 变量名其中:●访问说明符有public、private和protected三种: public:省略时默认为公有类型,可以由外部对象进行访问。 private:私有类型,只允许在类内部的方法中使用,若从 外部访问,必须通过构造函数间接进行。Protected:受保护类型,子类访问受到限制。● 数据类型包括基本类型以及用户自定义的扩展类型。 Java实用教程 (2) 方法:是类的操作定义,标志类的动态特征,它的基 本格式如下: ●访问说明符 数据类型 方法名(数据类型1 变量名1, 数据 类型2 变量名2) 其中: ●访问说明符为public、private和protected,其使用方法与 成员变量访问说明符的使用方法一致。 ●数据类型:包括基本数据类型和用户自定义的扩展类型。 ●数据类型为参数。 Java实用教程 3. 创建类的实例 使用关键字 new进行创建,例如:HelloApplet hp = new HelloApplet();例3.1中,自定义类apple,访问标识符缺省,定义三个属性://对应苹果的颜色//苹果的重量//是否吃完 Java实用教程 一个方法为: public boolean bite()//类方法{...} 公有类SetApplet中引用自定义类,首先创建类的实例: apple a = new apple(); 其次赋初值: a.appleweight = 0.5;//实例变量赋值 最后调用它的方法: System.out.println(a.bite());//调用实例方法 Java实用教程3.1.2 类的单继承性Java编程语言中允许用extends关键字从一个类扩展出一个 新类,新类继承超类的成员变量和方法,并可以覆盖方法。【例3.2】测试类的单继承性,程序输出结果如图3.2所示。 源程序代码如下://程序文件名TestExtend.javapublic class TestExtend extends Employee { public static void main(String[] args) { System.out.println(&覆盖的方法调用:& + getSalary(&王一&,500)); Java实用教程System.out.println(&继承的方法调用:& + getSalary2(&王一&,500));System.out.println(&覆盖的方法调用:& + getSalary(&王飞&,10000));System.out.println(“继承的方法调用:” + getSalary2(“王飞 &,10000));}public static String getSalary(String name, int salary) {Sif (salary&5000) str = &名字: & + name + & Salary: & + Salary: 低于5000&;elsestr = &名字: & + name + & Java实用教程 } }; class Employee { public S//名字//薪水 public static String getSalary(String name, int salary) { S str = &名字: & + name + & } Salary: & + Java实用教程public static String getSalary2(String name, int salary) { S str = &名字: & + name + & } Salary: & +}; Java实用教程 程序中定义了父类Employee类,它有两个方法getSalary和 getSalary2,方法体的实现都是一致的,都为输出名字和薪水的值。在TextExtend主类中覆盖了getSalary方法,方法体重新定义为薪水低于5000时并不输出薪水的值而是输出“低于 5000”,用于和继承的getSalary2方法进行比较。由图3.2可以看 出覆盖的方法按主程序中重定义的方法调用,而继承的方法直 接调用父类中的方法。 Java实用教程图3.2 测试单继承性程序的输出结果 Java实用教程3.1.3 特殊变量类中有两个特殊变量super和this。 1. super 类声明中用关键字extends扩展了其超类之后,super用在扩 展类中引用其超类中的成员变量。 【例3.3】使用super变量,输出结果如图3.3所示。源程序 代码如下://程序文件名为UseSuper.javapublic class UseSuper{ Java实用教程 public static void main(String[] args) { Manager m = new Manager(); m.name = &王飞&;m.salary = 10000;m.department = &业务部&; System.out.println(m.getSalary()); } } class Employee { Java实用教程public S//名字//薪水 //方法 public String getSalary() { S str = &名字: & + name + &\nSalary: & +}} class Manager extends Employee Java实用教程 { public S//部门 //方法 public String getSalary() { //使用super变量调用超类的方法return super.getSalary() + &\nDepartment: & +} } Java实用教程图3.3 测试super变量的输出 Java实用教程2. thisthis变量指向当前对象或实例。 str = &名字: & + name + &\nSalary: & + 上例中的语句可以换成下面的语句。 str = &名字: & + this.name + &\nSalary: & + this. 这两者是等同的,因为在Java编程语言中,系统自动将this 关键字与当前对象的变量相关联。但有一种情况例外,就是当 在某些完全分离的类中调用一个方法并将当前对象的一个引用 作为参数传递时。例如: Day d = new Day(this); Java实用教程3.1.4 构造函数类中的构造函数用来初始化一个类。构造函数为公有类型, 无返回值,用来从类实例中访问类时初始化此类的私有变量。 【例3.4】基于例3.3将公有变量改成私有变量之后,增加两 个构造函数,访问通过外部调用构造函数实现初始化赋值,得 到如图3.3所示的结果。 //程序文件名为UseConstruct.java public class UseConstruct{public static void main(String[] args) { Java实用教程Manager m = new Manager(&王飞&,10000,&业务部&);//初始化赋值System.out.println(m.getSalary());} }class Employee{ private S//名字//薪水 //构造函数 public Employee(String _name, int _salary) { Java实用教程 name = _ salary = _ } public String getSalary() { S str = &名字: & + name + &\nSalary: & + } } class Manager extends Employee { private S Java实用教程//构造函数public Manager(String _name, int _salary, String _department) { super(_name,_salary); department = _ } public String getSalary() {return super.getSalary() + &\nDepartment: & +} } Java实用教程 3.1.5 包 计算机操作系统使用文件夹或者目录来存放相关或者同类 的文档,在Java编程语言中,提供了一个包的概念来组织相关 的类。包在物理上就是一个文件夹,逻辑上代表一个分类概念。包就是指一组类。例如一个名叫Company的包,可以包含一组类,如Employee(雇员)、Manager(管理者)和Department(部 门)等。声明包的基本格式如下: Package 包名; Java实用教程 其中:Package为关键字,包名为标识符。 使用包时的注意事项如下:(1) Package语句要作为程序非注释语句的第一行语句。(2) 包内的类名惟一。 (3) 引用包中的类时,使用import语句。import语句的基本 格式为import 包名.类名,其中import为关键字,包名和类名之 间用圆点(.)隔开。 Java实用教程【例3.5】编写程序测试包,先建立一个Company文件夹,然后建立名为Manager.java的类文件。源程序代码如下: //程序文件名为Manager.java package C//声明包名Company class Employee{public S//名字//薪水public String getSalary() { Java实用教程 S str = &名字: & + name + &\nSalary: & + } } public class Manager extends Employee { public S//部门 public String getSalary() { return super.getSalary() + &\nDepartment: & + } } Java实用教程 对此文件进行编译,生成类文件Manager.class。 在原目录建立源程序文件UsePackage.java。源程序代码如下://程序文件名UsePackage.java import Company.M//引入包中的类 public class UsePackage { public static void main(String[] args) { Manager m = new Manager(); m.name = &王飞&; m.salary = 10000; m.department = &业务部&; System.out.println(m.getSalary()); } } Java实用教程 编译后,在命令提示符状态下运行,输出结果如图3.4所 示。从图3.4中可以看出首先进入Company目录,编译Manager.java文件,然后返回上层目录,编译UsePackage.java文件,最后执行UsePackage类文件,输出正确的结果。 Java实用教程图3.4 测试包的输出结果 Java实用教程3.2 接 口Java编程语言中禁止多继承属性,但可以通过接口来帮助类 扩展方法。接口中可以定义大量的常量和方法,但其中的方法 只是一种声明,没有具体的实现,使用接口的类自己实现这些 方法。接口与类的不同在于: (1) 没有变量的声明,但可以定义常量。 (2) 只有方法的声明,没有方法的实现。接口声明的基本格式如下:public interface 接口名 extends 接口列表 Java实用教程【例3.6】测试接口,定义接口文件Product.java,定义了两个常量,声明了一个方法。接口文件如下: //程序文件名Product.java public interface Product { static final String MAKER = &计算机制造厂&; static final String ADDRESS = &上海&; public int getPrice(); } Java实用教程 使用接口的源文件代码如下://程序文件名UseInterface.java public class UseInterface { public static void main(String[] args) { Computer p = new Computer(); System.out.print(p.ADDRESS + p.MAKER); System.out.println(& 计算机的价格:& + p.getPrice()+ & 万元&); }} Java实用教程class Computer implements Product{ public int getPrice() { return 1;}} Java实用教程首先编译接口文件“javac Product.java”,然后编译使用这个接口的类文件“javac.UseInterface.java”,最后执行类“java UseInterface”,输出结果如图3.5所示。图3.5 测试接口的输出结果 Java实用教程3.3 常用数据结构及类3.3.1 Vector类Vector类似于一个数组,但与数组相比在使用上有以下两个 优点。(1) 使用的时候无需声明上限,随着元素的增加,Vector的 长度会自动增加。 (2) Vector提供额外的方法来增加、删除元素,比数组操作 高效。Vector类有三个构造函数,分别如下:public Vector(); 该方法创建一个空的Vector。 Java实用教程 public Vector(int initialCapacity); 该方法创建一个初始长度为initialCapacity的Vector。 public Vector(int initialCapacity, int capacityIncrement); 该方法创建一个初始长度为initialCapacity的Vector,当向 量需要增长时,增加capacityIncrement个元素。 Java实用教程 (1) Vector类中添加、删除对象的方法如下: public void add(int index, Object element) 在index位置添加对象element。 public boolean add(Object o) 在Vector的末尾添加对象o。 public Object remove(int index) 删除index位置的对象,后面的对象依次前提。 Java实用教程 (2) Vector类中访问、修改对象的方法如下:public Object get(int index)返回index位置对象。 public Object set(int index, Object element) 修改index位置的对象为element。 Java实用教程(3) 其它方法:public String toString()将元素转换成字符串。public int size()返回对象的长度。 Java实用教程【例3.7】操作Vector对象,进行元素的添加、插入、修改和删除。程序输出结果如图3.6所示。源程序代码如下: //程序文件名为UseVector.java import java.util.V//引入JDK的Vector类public class UseVector { public static void main(String[] args) { Java实用教程Vector vScore = new Vector();vScore.add(& 86&); //添加元素 vScore.add(& 98&); //添加元素 vScore.add(1, & 99&); //插入元素 //输出结果 for (int I = 0; I & vScore.size(); I++) { System.out.print(vScore.get(i) + & &);}vScore.set(1, & 77&); //修改第二个元素 vScore.remove(0); //删除第一个元素 Java实用教程 System.out.println(″\n修改并删除之后″);for (int I = 0; I& vScore.size(); I++){ System.out.print(vScore.get(i) + & &); } System.out.println(& \n转换成字符串之后的输出\n& +vScore.toString());} }; Java实用教程图3.6 操作Vector对象的输出结果 Java实用教程3.3.2 Hashtable类Hashtable类存储的是对象的名-值对。将对象的名和它的值 相关联同时存储,并可以根据对象名来提取它的值。在 Hashtable中,一个键名只能对应着一个键值,然而一个键值可 以对应多个键名,键名必须是惟一的。构造函数以及常用方法 如下:public Hashtable()构建散列表。public Hashtable(int initialCapacity)构建长度为initialCapacity的散列表。 public int size() Java实用教程 返回散列表的名的个数。 public Object remove(Object key) 删除散列表中key名及其对应的value值。 public Object put(Object key,Object value) 将对象名key和对象值value存放到散列表中。 public Object get(Object key) 返回散列表key名对应的值。 public String toString() 转换成字符串。 Java实用教程【例3.8】操作Hashtable对象,进行添加、修改、删除等操作,输出结果如图3.7所示。源程序代码如下://程序文件名为UseHashtable.java import java.util.Hpublic class UseHashtable { public static void main(String[] args){Hashtable hScore = new Hashtable(); hScore.put(&张一&,&86&); Java实用教程hScore.put(&李二&,&98&); hScore.put(&海飞&,&99&);System.out.println(&转换成字符串之后的输出:& + hScore.toString());hScore.put(&李二&,&77&);hScore.remove(&张一&);System.out.println(&修改并删除之后&);System.out.println(&转换成字符串之后的输出:& + hScore.toString()); } } Java实用教程图3.7 操作Hashtable对象的输出结果 Java实用教程3.3.3 Enumeration接口实现Enumeration接口的对象生成一系列元素,通过 nextElement()方法依次读取下一个元素。只有以下两个方法:public boolean hasMoreElements()测试是否还有元素。 public Object nextElement() 返回枚举的下一个元素。 Enumeration接口及其方法通常与Vector、Hashtable一起连 用,用来枚举Vector中的项和Hashtable中的键名,例如: for (Enumeration e = v.elements() ; e.hasMoreElements() ;) System.out.println(e.nextElement()); Java实用教程 【例3.9】使用Enumeration接口枚举Vector中的对象和 Hashtable对象中的键名,并进行输出,结果如图3.8所示。源 程序代码如下://程序文件名UseEnumeration.java import java.util.*; public class UseEnumeration { public static void main(String[] args) { Vector vScore = new Vector(); vScore.add(&86&); vScore.add(&98&); Java实用教程vScore.add(1,&99&); System.out.println(&Vector:& + vScore.toString()); for (Enumeration e = vScore.elements() ; e.hasMoreElements() ;)System.out.println(e.nextElement());Hashtable hScore = new Hashtable();hScore.put(&张一&,&86&);hScore.put(&李二&,&98&); hScore.put(&海飞&,&99&); System.out.println(&Hashtable:& + hScore.toString()); Java实用教程 for (Enumeration e = hScore.keys() ; e.hasMoreElements() ;) { String str = (String)e.nextElement();System.out.print(str + &:&);System.out.println(hScore.get(str));}}} Java实用教程图3.8 使用Enumeration接口枚举输出 Java实用教程 3.3.4 Date类 Date类用来指定日期和时间,其构造函数及常用方法如下: public Date() 从当前时间构造日期时间对象。 public String toString() 转换成字符串。 public long getTime() 返回自新世纪以来的毫秒数,可以用于时间计算。 Java实用教程 【例3.10】测试执行循环花费的时间(数量级为毫秒),具体 时间情况如图3.9所示。源程序代码如下: //程序文件名为UseDate.javaimport java.util.D public class UseDate { public static void main(String[] args) {Date dOld = new Date();long lOld = dOld.getTime(); System.out.println(&循环前系统时间为:& +dOld.toString()); Java实用教程int sum = 0; for (int i=0; i&100; i++) { sum += } Date dNew = new Date(); long lNew = dNew.getTime(); System.out.println(&循环后系统时间为:& +dNew.toString());System.out.println(&循环花费的毫秒数为:& + (lNew - lOld));} } Java实用教程图3.9 循环时间测试 Java实用教程3.3.5 String类String类用于操作非数值型字符串,它提供了七类方法操 作,分别为字符串创建、字符串长度、字符串比较、字符串检 索、字符串截取、字符串运算和数据类型转换。 1. 字符串创建 public String() 构造一个空字符串。 public String(char[] value)使用字符数组value中的字符以构造一个字符串。public String(String original) 使用原字符串original的拷贝以构造一个新字符串。 Java实用教程2. 字符串长度public int length()返回字符串的长度。3. 字符串比较public boolean equals(Object anObject)比较字符串是否与anObject代表的字符串相同(区分大小写)。public boolean equalsIgnoreCase(String anotherString)比较字符串是否与anotherString相同(不区分大小写)。 Java实用教程 4. 字符串检索 public int indexOf(String str) 返回一个字符串中str第一次出现所在的位置。public int indexOf(String str, int fromIndex)返回从fromIndex开始字符串str出现所在的位置。 Java实用教程5. 字符串截取public String substring(int beginIndex, int endIndex)返回benginIndex到endIndex之间的字符串。6. 字符串运算运算符为“+”,表示连接运算。下面的行语句输出连接的字符串。 System.out.println(&Hashtable:& + hScore.toString()); Java实用教程【例3.11】操作字符串,输出结果如图3.10所示。源程序 代码如下://程序文件名为TestString.javapublic class TestString{ public static void main(String[] args) { String str = new String(&The substring begins at the specified beginIndex.&); String str1 = new String(&string&); String str2 = new String(); int size = str.length();//字符串长度 Java实用教程 int flag = str.indexOf(&substring&); str2 = str.substring(flag,flag + 9);//取子字符串System.out.println(&字符串& + str + &\n总长度为:& + size);if(str1.equals(str2))//判断是否相等 System.out.println(&截取的字符串为:& + str1); else System.out.println(&截取的字符串为:& + str2);}} Java实用教程图3.10 操作字符串的输出 Java实用教程7. 数据类型转换各种原始数据类型与String类型之间可以通过方法相互转换。 valueOf()系列的静态方法用于从其它对象(原始数据类型对 象)转换成字符串。例如: public static String valueOf(Boolean b)public static String valueOf(char c)public static String valueOf(int i)public static String valueOf(long l)public static String valueOf(float f) public static String valueOf(double d) Java实用教程具体实例如下:(1) 从int转换到String。 例如: int intvar = 1; S strvar = String.valueOf (intvar); //&1& Java实用教程 (2) 从float转换到String。 例如: float fltvar = 9.99f; Sstrvar = String.valueOf(fltvar); //&9.99& Java实用教程 (3) 从double转换到String。 例如:double dblvar = ;Sstrvar = String.valueOf (dblvar); //&9.& Java实用教程 (4) 从char转换到String。 例如: char chrvar = 'a'; S strvar = String.valueOf (chrvar); //&a& Java实用教程 (5) 从String转换到int、float、long、double。 例如: String intstr = &10&;String fltstr = &10.1f&;String longstr = &&; String dblstr = &&; int i = Integer.parseInt(intstr); //10float f = Float.parseFloat(fltstr); //10.1long lo = Long.parseLong(longstr); // double d = Double.parseDouble(dblstr); //9. Java实用教程 (6) 从String转换到byte、short。 例如: String str = &0&; byte b = Byte.parseByte(str); //0short sh = Short.parseShort(str);//0 Java实用教程 (7) 从String转换到char。 例如: String str = &abc&;char a = str.charAt(0);//返回字符a Java实用教程 (8) 从String转换到boolean。 例如: String str = &true&; Boolean flag = Boolean.valueOf(str);//true Java实用教程 3.3.6 StringBuffer类 StringBuffer类提供了一个字符串的可变序列,类似于String 类,但它对存储的字符序列可以任意修改,使用起来比String类灵活得多。它常用的构造函数为:StringBuffer()构造一个空StringBuffer对象,初始容量为16个字符。StringBuffer(String str) 构造一个StringBuffer对象,初始内容为字符串str的拷贝。 对于StringBuffer类,除了String类中常用的像长度、字 符串截取、字符串检索的方法可以使用之外,还有两个较为 方便的方法系列,即append方法系列和insert方法系列。 Java实用教程 (1) append方法系列根据参数的数据类型在StringBuffer对象 的末尾直接进行数据添加。 public StringBuffer append(boolean b) public StringBuffer append(char c) public StringBuffer append(char[] str) public StringBuffer append(char[] str, int offset, int len)public StringBuffer append(double d)public StringBuffer append(float f) public StringBuffer append(int i)public StringBuffer append(long l)public StringBuffer append(Object obj) public StringBuffer append(String str)public StringBuffer append(StringBuffer sb) Java实用教程 (2) insert方法系列根据参数的数据类型在StringBuffer的 offset位置进行数据插入。 public StringBuffer insert(int offset, boolean b)public StringBuffer insert(int offset, char c)public StringBuffer insert(int offset, char[] str) public StringBuffer insert(int index, char[] str, int offset, int len)public StringBuffer insert(int offset, double d)public StringBuffer insert(int offset, float f) public StringBuffer insert(int offset, int i) public StringBuffer insert(int offset, long l) public StringBuffer insert(int offset, Object obj)public StringBuffer insert(int offset, String str) Java实用教程 (3) 下面这个方法用于将stringbuffer对象的数据转换成字符串: public String toString() Java实用教程 【例3.12】基于例3.11进行修改,使用StringBuffer对象得到 如图3.10所示的输出界面。//程序文件名为TestString.java public class TestString { public static void main(String[] args) { StringBuffer str = new StringBuffer(&The substring begins at the specified beginIndex.&);StringBuffer str1 = new StringBuffer(&string&);String str2 = new String(); int size = str.length(); int flag = str.indexOf(&substring&); Java实用教程str2 = str.substring(flag,flag + 9); StringBuffer strOut = new StringBuffer(&字符串&); strOut.append(str); strOut.append(&总长度为:&); strOut.append(size); int f = strOut.indexOf(&总&); strOut.insert(f,'\n'); System.out.println(strOut.toString()); if(str1.toString().equals(str2)) System.out.println(&截取的字符串为:& + str1.toString()); else System.out.println(&截取的字符串为:& + str2);}} Java实用教程 3.3.7 StringTokenizer类 StringTokenizer类是一个实现Enumeration接口的类,它使 得应用程序可以将字符串分成多个记号,默认情况下以空格为 分隔符,例如将字符串“this is a test”分成四个单词记号。用户也可以指定分隔符。分隔符为false,分割字符串;分隔符为true,则将分隔符自身作为分割后的字符串的一部分。其构造 函数和常用方法如下: StringTokenizer(String str) 以字符串str构建StringTokenizer对象。 Java实用教程StringTokenizer(String str, String delim)使用delim分隔符,以初始字符串str构建StringTokenizer对象。 int countTokens() 返回识别的总记号数。 boolean hasMoreTokens() 测试是否还有识别的记号。 boolean nextToken(String delim)返回字符串delim分隔的下一个记号。String nextToken() 返回下一个识别的记号。 Java实用教程【例3.13】使用StringTokenizer类分割字符串,字符串的分 割情况如图3.11所示。源程序代码如下:import java.util.*;public class UseToken { public static void main(String[] args) {String str = &数学::英语::语文::化学&;StringTokenizer st = new StringTokenizer(str,&::&); System.out.println(str + &\n课程数为:& +st.countTokens()); Java实用教程 while (st.hasMoreTokens()) { System.out.println(st.nextToken(&::&)); } str = &Hello this is a test&; st = new StringTokenizer(str); System.out.println(str + &\n单词数为:& +st.countTokens()); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } }} Java实用教程图3.11 StringTokenizer分割单词的结果输出 Java实用教程习 题1. 定义一个类Student,属性为学号、姓名和成绩;方法为增加记录SetRecord和得到记录GetRecord。SetRecord给出学号、姓名和成绩的赋值,GetRecord通过学号得到考生的成绩。 2. 给出上题中设计类的构造函数,要求初始化一条记录(学 号、姓名、成绩)。 3. 假设一个学生所选课程为语文、数学、英语、政治、物 理、化学,给出此学生所选课程的Vector列表,并访问物理存放 在Vector中的位置。 Java实用教程 4. 对于图3.12中的Shebei表,将设备编码和设备名称作为 Hashtable中的键和值进行存储,然后访问此Hashtable,找到键 并输出设备编码为的设备名称。图3.12 习题3.4中的Shebei表 Java实用教程 5. 编写程序,测试字符串“你好,欢迎来到Java世界”的 长度,将字符串的长度转换成字符串进行输出,并对其中的“Java”四个字母进行截取,输出截取字母以及它在字符串中的位置。 6. 对于图3.12中的Shebei表,将设备编码和设备名称用 :: 进行连接,形成新的字符串,存储到Vector向量对象中,如 0001::打印机、0008::书桌,然后访问Vector对象中设备编码为 的项,使用字符串操作的方法读取这两项设备编码 对应的设备名称并输出。 Java实用教程 7. 编写程序,测试1~50的阶乘所耗费的毫秒级时间。 8. 编写程序,将设备编码对应设备名称的记录添加到一个 StringBuffer对象中,编码和名称之间用::隔开,每条记录之间 用**隔开。9. 编写程序,将字符串“打印机*钟表//自行车**雨伞%%收音机??电脑”进行拆分,输出每个设备的名字。 Java实用教程第4章 Java Applet4.1 Applet简介 4.2 显示Applet 4.3 载入图片 4.4 载入声音4.5 Applet控制浏览器环境4.6 服务器下配置Applet文件 4.7 使用插件载入Applet4.8 JAR文件4.9 Applet和应用程序 习 题 Java实用教程4.1 Applet 简 介4.1.1 Applet的定义 Applet是Java语言编写的,无法独立运行,但可以嵌入到 网页中执行。它扩展了传统的编程结构和方法,可以通过互联 网发布到任何具有Java编译环境浏览器的个体计算机上。 Java实用教程 4.1.2 Applet的用途 用户可以静态显示Applet,像显示一幅图片或者一段文本 一样;Applet也可以是一个动态交互过程,用户输入简单的数 据,就会产生相应的响应。 Java实用教程4.1.3 Applet的编写格式编写Applet时,首先要引入java.applet包中的类,这个类里 包含三个接口和Applet的类: import java.applet.*; import java.applet.A 类头定义为: public class MyApplet extends A 用来声明自定义类是从Applet类扩展而来的。 Java实用教程 类体中没有应用程序中必须具备的main方法,取而代之的 是下面几个常用方法: public void init();初始化――在这个方法中设置一些变量的初始化,像界面 布局设置等。public void start() 启动――Applet开始执行。 public void stop()停止――Applet停止执行。public void destroy() 撤消――销毁Applet。 Java实用教程 【例4.1】编写Applet,显示系统的当前时间。源程序代码如下: //程序文件名UseApplet.javaimport java.awt.*;import java.applet.A import java.util.D public class UseApplet extends Applet {String strTime = new String();public void init() { } Java实用教程public void start(){ Date d = new Date(); strTime = d.toString(); repaint();}public void paint(Graphics g) { g.drawString(&当前时间为:& + strTime,20,30); } }; Java实用教程4.2 显 示 Applet4.2.1 工作流程 Applet是嵌入在HTML网页中显示的。首先从服务器请求 HTML网页,检测到Applet的类请求时,将所需类下载到本地, 然后运行,其工作流程如图4.1所示。请求HTML页 载入HTML页Internet 客户端 发现Applet标记请求类文件 载入类文件 服务器图4.1 客户端显示Applet Java实用教程HTML页面中引用Applet的标签为&applet&&/applet&,浏览器中执行Applet的步骤如下: (1) 浏览器请求HTML页面。 (2) 读HTML页面的过程中发现&applet&标签,然后继续向服务器请求标签中声明的类文件。(3) 浏览器获取该类文件。(4) 字节码验证这个类是否合法。(5) 如果合法就开始执行类文件。 Java实用教程有时可能需要载入多个类文件,直到将所有所需的类文件下载完毕为止。 为上面的UseApplet.class类写一个最简单的网页UseApplet.html: &html& &body& &applet code = &UseApplet.class& height = 200 width = 300& &/applet& &/body& &/html& Java实用教程图4.2 Applet输出时间 Java实用教程图4.3 网页下显示输出时间的Applet Java实用教程 4.2.2 参数设置 在HTML页面中嵌入Applet类文件时,可以在&applet&标签中设置属性以控制Applet类文件的外观显示,也可以传递一些用户自定义属性。嵌入的格式为: &applet attributes1& &param attributes2&...&/applet& Java实用教程其中:(1) &applet&&/applet&标签内为Applet的信息。 (2) &param&标记在&applet&&/applet&之间进行设置,然后 由Applet自带的方法获取。 (3) &param&标记有两个自己的属性:name和value。例如: &param name =&aaa&value = &bbb&& (4) attribute1和attribute2的属性设置如表4.1所示。 Java实用教程 表4.1 属性设置及其描述属性列表 放 置 属 性 code codebase height width vspace hspace align alt archive object name value 描 述 使用的 Applet 类文件的名字 基目录的 URL,Applet 的类文件都存放在这里 Applet 网页上占据的垂直像素高度 Applet 网页上占据的水平像素宽度 Applet 和其它 HTML 语句之间的垂直距离 Applet 和其它 HTML 语句之间的水平距离 与页中其余部分的对齐方式 不显示 Applet 时,显示的实际文本 浏览器预加载的其它文档资源的列表 代替 code 属性出现,将 Applet 类文件作为一个对象调用 Applet 程序中所需参数名 Applet 程序中所需参数传递的值attribute1&applet&Attribute2&PARAM& Java实用教程 其中,code属性是必须的,height和width属性用来设置高 度和宽度,如果都为0,那么Applet将隐藏。 对于例4.1中UseApplet.html,如果有&applet code = &UseApplet.class& height = 200 width = 300&&/applet& 那么说明网页加载的类名为UseApplet.class,类显示的高度为 200像素点,宽度为300像素点。 表4.1中列出的attibute1属性为&applet&定义的属性。用户 还可以根据Applet程序的需要,传递一些程序自身属性,这些 属性通过attribute2中name属性给出所需参数的名,value属性给 出所需参数的值。public String getParameter(String name) Java实用教程 【例4.2】基于例4.1,在加载类的网页上设置一个用户名, 使得Applet输出为“XXX,你好,当前时间为:(具体时间)”, 如图4.4所示。源程序代码如下://程序文件名UsePara.java import java.awt.*; import java.applet.Aimport java.util.Dpublic class UsePara extends Applet {String strTime = new String();String strUser = new String(); public void init() { Java实用教程//得到网页的参数:用户名 strUser = getParameter(&USER&);} public void start() { Date d = new Date(); strTime = d.toString(); repaint(); } public void paint(Graphics g) { g.setColor(Color.red); g.drawString(strUser + & 你好,当前时间为:& + strTime,20,30); } }; Java实用教程在UseApplet.html中添加一个用户参数设置:&param name = &USER& value = 王飞&使修改后的网页程序如下:&html& &body& &applet code = &UsePara.class& height = 200 width = 400& &param name = &USER& value = 王飞&&/applet&&/body&&/html& Java实用教程图4.4 网页设置参数后的Applet输出 Java实用教程 放在浏览器中查看时,显示效果如图4.5所示。图4.5 浏览器中查看获取网页参数的Applet输出 Java实用教程4.2.3 生命周期Applet的生命周期是指Applet存在的时间,即某些方法还在 被调用的时间。根据Applet的四个方法init()、start()、stop()、 destroy(),可以得出Applet的生命周期,如图4.6所示。初始化启动 离开网页 停止 退出浏览器 撤消 重新加载浏览器或 改变浏览器尺寸或 返回网页图4.6 Applet的生命周期 Java实用教程4.3 载 入 图 片在java.applet包中存在一个接口AppletStub。当一个Applet创 建之后,一个Applet Stub使用setStub方法附加到Applet上,这个 Stub用来充当Applet和浏览器环境之间的接口。在这个接口中一 个重要的方法: public URL getDocumentBase() 该方法返回的是Applet类文件所在网页的网络路径。 例如,如果一个Applet类文件嵌入在下面网页中/products/jdk/1.2/index.html那么返回的路径为 /products/jdk/1.2/ Java实用教程 通过这个网络路径可以得到图片,从而由Applet类载入, 载入图片的方法为: public Image getImage(URL url, String name) 其中: (1) url给出图片所在的网路路径。 (2) name给出图片的名字。例如:url路径可以为/products/jdk/1.2/,而name可以为路径下的图片index_01.gif。 Java实用教程 【例4.3】编写Applet,载入Applet类文件所在路径下的图片 index_01.gif,然后如图4.7所示显示图片。源程序代码如下: //程序文件名UseImage.javaimport java.awt.*;import java.applet.A import java.net.*;public class UseImage extends Applet{ //定义图像对象 Image testI public void init(){ Java实用教程//得到图片 testImage = getImage(getDocumentBase(),&index_01.gif&);} public void paint(Graphics g) { g.drawImage(testImage,0,0,this); }} 载入UseImage.class类的UseImage.html文件如下: &html& &body& &applet code = &UseImage.class& height = 200 width = 300& &/applet& &/body& &/html& Java实用教程图4.7 Applet载入图片显示 Java实用教程4.4 载 入 声 音Applet类提供一个用于载入声音的方法,即 public AudioClip getAudioClip(URL url, String name) 该方法返回由url和name决定的AudioClip对象。 其中: (1) url:音频剪辑的绝对URL地址; (2) name:相对于上面的url,为音频剪辑的相对地址,通 常指名字。 Java实用教程 【例4.4】编写载入声音的Applet。源程序代码如下://程序文件名UseAudio.java import java.awt.*;import java.applet.Apublic class UseAudio extends Applet {public void init(){ }public void start(){ //播放Applet所在目录下的tiger.au声音文件getAudioClip(getDocumentBase(),&tiger.au&).play(); Java实用教程 } }; 载入类的HTML文件如下: &html& &body&&applet code = &UseAudio.class& height = 200 width = 300&&/applet &/body& &/html& 在浏览器加载或者appletviewer命令启动时可以听见老虎的 叫声,但必须保证tiger.au在UseAudio.class类文件所在的目录。 Java实用教程4.5 Applet控制浏览器环境java.applet包中提供一个接口AppletContext,对应着Applet 的环境,主要指包含Applet的网页文档等,在这个接口内有两 个重要方法: pubilc void showDocument(URL url)浏览器下载Applet时,showDocument可以将当前Applet页面用于显示url网址的内容。 url 给出页面的绝对网络路径。 public void showDocument(URL url, String target) target可以表明url显示的位置,有四种情况,如表4.2所示。 Java实用教程 表4.2 target 取 值target 选项 _self _parent _top _blank 描 将 url 表示的页面显示在 Applet 框架中 将 url 表示的页面显示在父框架中,如果不存在,情况如同_self 将 url 表示的页面显示在 Applet 窗口的顶层框架,如果不存在,情况如同_self 将 url 表示的页面显示在新窗口中 述public void showStatus(String status)字符串status显示在状态栏中,告知用户当前类文件运行中的状态。 Java实用教程【例4.5】编写Applet,在状态栏显示鼠标单击Applet的次数, 结果如图4.8所示。源程序代码如下://程序文件名ShowStatus.java import java.applet.*; import java.applet.Aimport java.awt.event.*;public class ShowStatus extends Applet{int count = 0; public void init() Java实用教程 { } public boolean mouseClicked(MouseEvent e) {count ++;getAppletContext().showStatus(&你好,你已经点击 了& + count + &次了!&); } }; Java实用教程图4.8 状态栏显示单击次数信息 Java实用教程 【例4.6】编写Applet,在一个框架中显示不同来源的网页 信息,如图4.9所示。左框架为西安交通大学首页,右框架为新 浪网首页。源程序代码如下://程序文件名ShowHtml.java import java.applet.*; import java.applet.A import java.net.URL;public class ShowHtml extends Applet{public void init() { } Java实用教程public void start() { try{//创建URL对象 URL urlName=new URL(&http://www.&);//在左框架显示网页getAppletContext().showDocument(urlName,&left&); urlName = new URL(&.cn&); //右框架显示网页 getAppletContext().showDocument(urlName,&right&); } Java实用教程catch(MalformedURLException e){ System.out.println(e.getMessage()); } } } 载入Applet的网页Head.html的代码如下: &html&&body&&applet code = &ShowHtml.class& height = 0 width = 0& &/applet& Java实用教程&h3&这是一个框架网页,上面的框架隐藏载入applet类文件,由applet控制左框架显示西安交通大学的主页,右框架显示新浪网的主 页。&/body&&/html&装配的框架网页ShowHtml.html的源代码如下,可以看见其中框架名字左边的为left而右边的为right。 &html& &frameset rows=&21%,*&& Java实用教程&frame name=&guid& src=&Head.html&&&frameset cols=&50%,*& frameborder=&YES& border=&1&framespacing=&1&& &frame name=&left& src=&&& &frame name=&right& src=&&& &/frameset&&/frameset&&/html& Java实用教程图4.9 框架网页显示 Java实用教程4.6 服务器下配置Applet文件由于Applet文件是客户端浏览器从服务器端下载的HTML网 页,所以将文件配置到服务器端,由客户进行访问。本机中使用的服务器为Tomcat 4.0,安装成功后重启动,则服务器开始运转,在浏览器的网址栏键入http://192.100.100.43:8080/index.html,如果出现如图4.10所示的Tomcat主网页,则证明服务器测试正常。 Java实用教程图4.10 Tomcat主页 Java实用教程 配置自己的文件时,推荐在安装目录D:\Apache Tomcat 4.0\webapps\ROOT下建立自己的文件夹,这样有利于管理。本书作者在此文件夹下建立user目录,以为载入图片的Applet为例,将UseImage.html、UseImage.class和Image_01.gif拷贝到user目录 下,并在IE浏览器的地址栏键入网址: http://192.100.100.43:8080/user/UseImage.html,浏览器显示结果 如图4.11所示,与前面例4.3中图4.7载入的图片效果一致,但可以看出地址栏的网址不同。 Java实用教程图4.11 配置到服务器端的网页显示 Java实用教程4.7 使用插件载入AppletJava插件(Plug-in)扩展了网络浏览器的功能,使得无论在哪 个浏览器(IE浏览器或者Netscape浏览器)下,Java Applet可在Sun 的Java运行环境(JRE)下运行,而不是在浏览器自带的JRE环境下 运行。Java插件是Sun的JRE环境的一部分,当安装JRE时,插件自动安装。当你安装J2sdk-1.4.0_01时,JRE环境版本号也为1.4.0_01。使用插件最大的不同是将IE浏览器中网页原有的 &applet&标签改成了&object&标签,在Netscape中则改成&embed&,这里只讨论IE浏览器中的使用。 Java实用教程 J2sdk1.4提供了一个叫做HtmlConverter的工具,用于将包含 普通&applet&标签的HTML文件转换成包含对象的文件。在命令 行提示符键入命令HtmlConverter后按回车键,出现如图4.12所示 对话框。 其中: (1) “指定文件”为要转换的文件。 (2) “模板文件”为操作系统和浏览器适用类型,操作系统有 Windows和Solaris,浏览器分为IE和Netscape。本书选择适用于 Windows和Solaris的IE浏览器。 Java实用教程 (3) 在“适用于小应用程序的Java版本”栏中选中第一项 “只适用于Java1.4.0_01”,这是因为作者使用的JDK安装版本为 Java1.4.0_01。 将这几项进行设置之后,单击“转换”按钮,则将原有的 UseImage.html文件内容转换为:&html&&body& &!--&CONVERTED_APPLET&--& &!-- HTML CONVERTER --& &OBJECT Java实用教程classid=&clsid:CAFEEFAC-01-ABCDEFFEDCBA&WIDTH = 300 HEIGHT = 200codebase=&/products/plugin/autodl/jinstall1_4_0_01-win.cab#Version=1,4,0,10&& &PARAM NAME = CODE VALUE = &UseImage.class& & &PARAM NAME = ARCHIVE VALUE = &UseImage.jar& & &PARAM NAME=&type& VALUE=&application/x-java-jpi-version=1.4.0_01&& Java实用教程&PARAM NAME=&scriptable& VALUE=&false&&&/OBJECT& &!-&APPLET CODE = &UseImage.class& ARCHIVE = &UseImage.jar& WIDTH = 300 HEIGHT = 200& &/APPLET& --&&!--&END_CONVERTED_APPLET&--&&/body& &/html& Java实用教程 图 4 12. HtmlConverter工 具 界 面 Java实用教程 其中codebase=&/products/plugin/autodl/jinstall1_4_0_01-win.cab#Version=1,4, 0, 10&&表示如果客户端浏览器 不存在此插件,可以从codebase指定的网址下载,由上述语句 行可以看出HtmlConverter生成的插件文件的插件下载地址为 Sun公司的网站。如果本机上放置了插件的安装程序,那么此 处可以改为从本机下载,以加快下载速度。如果在网站上发布 你的Applet的网页,建议使用插件方式载入Applet,可以与多 种浏览器兼容。 Java实用教程4.8 JAR 文 件4.8.1 操作JAR文件 在JDK的安装目录的bin子目录下有一个jar.exe文件,这就 是JAR文件的操作工具,用它及一系列选项来实现对JAR文件的 操作。jar命令的格式如下: jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... Java实用教程其中:(1) ctxu四者必选其一,各选项的含义如下: -c 创建新的存档; -t 列出存档内容的列表; -x 展开存档中命名的(或所有的)文件; -u 更新已存在的存档。 Java实用教程 (2) vfm0M为可选项,各选项的含义如下:-v 生成详细输出到标准输出上;-f 指定存档文件名;-m 包含来自标明文件的标明信息;-0 只存储方式,未用ZIP压缩格式;-M 不产生所有项的清单(manifest)文件;-C 改变到指定的目录,并且包含下列文件。 Java实用教程 (3) 清单(manifest)文件名和存档文件名都需要指定,指定的 顺序依照命令行中“m”和“f”标志的顺序。 例如: ① 将两个class文件存档到一个名为“classes.jar”的存档文件 中: jar cvf classes.jar Foo.class Bar.class ② 用一个存在的清单(manifest)文件“mymanifest”将foo/目录 下的所有文件存档到一个名为“classes.jar”的存档文件中: jar cvfm classes.jar mymanifest -C foo/ . 对JAR文件常用的操作有三种:创建JAR文件、列出JAR文 件和抽取JAR文件。 Java实用教程 1. 创建JAR文件 jar cvf UseImage.jar UseImage.class index_01.gif 当用JAR工具创建新的档案时,自动增加一个声明文件到 文档中。如果用户需要创建自己的声明文件时,则指定m选项。 可以看到本目录下多了一个UseImage.jar文件。创建JAR文件的过程如图4.13所示。图4.13 创建JAR文件 Java实用教程 2. 列出JAR文件的内容 jar tvf UseImage.jar 执行命令后列出JAR文件中的内容,如图4.14所示。图4.14 列出JAR文件 Java实用教程 3. 抽取JAR文件 jar xvf UseImage.jar抽取JAR文件是将JAR中包含的类以及相关文件逐一恢复。在E:\_Work\Java\sample目录下建立JAR文件夹,将JAR文件放入此文件夹,然后进行抽取,可以看见JAR目录下除了UseImage.class和index_01.gif,还有META-INF子目录,下面有 一个文件MANIFEST.MF。图4.15给出抽取JAR文件的过程。 Java实用教程图4.15 抽取JAR文件 Java实用教程4.8.2 客户端使用JAR文件&applet&标签中添加一个属性名字为archive,它的值为要载 入的.jar文件。例如archive=&UseImage.jar&。例如,将D:\Apache Tomcat 4.0\webapps\ROOT\user\UseImage.html文件代码改为:&html& &body& &applet code = &UseImage.class& archive=&UseImage.jar& height = 200 width = 300& &/applet& &/body&&/html& Java实用教程4.9 Applet和应用程序【例4.7】修改例4.1的Applet,使得它可以从命令提示符状 态下访问。 (1) 基于例4.1的UseApplet添加一个main方法如下: public static void main(String[] args){//创建一个框架 Frame f = new Frame(&时间&); //关闭窗口时退出系统 f.addWindowListener(new WindowAdapter(){ Java实用教程 public void windowClosing(WindowEvent evt) {System.exit(0);} }); //创建一个AppletApp对象 AppletApp a = new AppletApp();//将对象载入框架f.add(&Center&,a); //设置框架大小f.setSize(300,200);//显示框架 Java实用教程f.show();//初始化对象a.init();//启动对象 a.start(); } Java实用教程(2) 修改后的源程序代码如下://程序文件名AppletApp

我要回帖

更多关于 digt函数java 的文章

 

随机推荐