1、Java 程序设计实验指导书成都信息工程学院计算机系2006目录概 述 .- 1 -实验一Java 程序设计基础.- 3 -实验二Java 语言基础.- 14 -实验三Java 语言面向对象基础.- 27 -实验四 包、访问权限.- 42 -实验五异常处理和包装类的编程练习. - 48 -实验六Java 语言的字符串类.- 56 -实验七多线程基础编程.- 60 -实验八多线程并发编程.- 61 -实验九字符流和字符流输入/输出编程. - 63 -实验十集合、列表、映射类编程. - 65 -实验十一 Java 高级编程.- 66 -实验十二数据库的连接:JDBC. - 68 -实验十三综合设计
2、实验拼图游戏.- 69 -概述一、 上机实验的目的上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理 解Java语言的基本结构和程序设计方法。通过亲手编程掌握Java 语言编程的方法。二、 实验基本内容为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了13个实验。学生 可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用 程序。指导书中的13个实验如下。一、Java程序设计基础二、Java语言基础三、Java语言面向对象基础四、包、访问权限五、异常处理和包装类的编程练习六、Java语言的字符串类七、多线程基础编程八、多线程并发编
3、程九、字符流和字符流输入/输出编程十、集合、列表、映射类编程十一、Java高级编程十二、数据库的连接:JDBC十三、综合设计实验拼图游戏三、 实验任务与时间安排Java 编程技术是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外使用相关技术进行编程练习。Java 编程技术上机实验时间为 22 学时,与教学内容- 69 -同时进行上机实验。20 个上机学时分为前 10 个实验。后面 3 个实验学生需选做其一,占用课堂 2 个学时,课外 6 个学时。四、 实验设备要求Java 的开发和运行环境对机器的配置要求较高。下面给出的是实验用机的软件和硬件基本配置。软件配置:Windows 20
4、00 Professional、IE5.5以上硬件配置:CPU P4 2.0G以上、内存 512MB以上实验一Java 程序设计基础实验目的1、 学习构建Java语言开发和运行环境2、 学习使用EditPlus编写Java源程序3、 学习使用javac命令编译源程序4、 学习使用java命令运行程序5、 初步了解使用Java语言进行程序设计的基本步骤6、 为进行后续实验做好准备实验要求1、 下载、安装Java软件开发工具包(JSDK);2、 设置相关环境变量;3、 使用EditPlus编写一个简单的Java程序; 4、 使用javac命令编译源程序;5、 使用java命令运行程序,观察运行结果
5、。实验内容1、 Java 软件开发工具包(JSDK)的下载与安装(1) 下载 SDK为了建立基于 SDK 的 Java 运行环境,需要先下载 Sun 的免费 SDK 软件包。SDK 包含了一整套开发工具,其中包含对编程最有用的是 Java 编译器、Applet 查看器和Java 解释器。在浏览器中输入 1.1 所示的 Sun 公司网站页面。图 1.1在页面右边“Popular Downloads”栏中可看到最新版的 SDK 软件包(早期版本称为 JDK),这里显示的是“J2SE 5.0”(当前最新版)。单击“J2SE 5.0”超链接,可看到图 1.2 所示页面。图 1.2在页面的“Downlo
6、ad JDK 5.0 Update 6”栏可以选择下载 最新的 J2SE 5.0 SDK 软件包。有两种选择:一种是在线安装“Windows Installation”;一种是离线安装“Windows Offline Installation”。单击页面中“SDK”列对应的“DOWNLOAD”超链接,可看到图 1.3 所示的下载协议说明书。图 1.3单击“ACCEPT”按钮,同意 Sun 公司的协议,可进入到图 1.4 所示的下载页面, 单击“Windows Offline Installation, Multi-language”超链接,开始下载工作,下载的安装文件保存为“jdk-1_5_0
7、_06-windows-i586-p.exe”。图 1.4(2) 安装 SDK运行“jdk-1_5_0_06-windows-i586-p.exe”软件包,可安装 SDK,在安装过程中可以设置安装路径及选择组件,默认的安装路径为“C:Program FilesJavajdk1.5.0_06”, 这里将安装目录指定为“D:jdkjdk1.5.0_06”,默认的组件选择是全部安装。(3) SDK 安装目录中的 Java 命令安装成功后,D:jdkjdk1.5.0_06 中的文件和子目录结构如图 1.5 所示。图 1.5其中,“bin”文件夹中包含编译器(javac.exe)、解释器(javac.e
8、xe)、Applet 查看器(appletviewer.exe)等 Java 命令的可执行文件,如图 1.6 所示。“demo”文件夹中包含一些源代码的程序示例。图 1.62、 环境变量的设置SDK 中的工具都是命令行工具,需要在命令行窗口从命令行提示符下运行它们。很多人可能会不习惯,但这是 Sun 特意采取的策略,为的是把精力更多地投入到 Java 语言本身而不是花在开发工具上。为了能正确方便的使用 SDK,可手工配置一些 Windows 的环境变量。以 Windows 2000 为例说明设置过程。在桌面“我的电脑”图标上单击右键,选择“属性”菜单,将出现系统特性设置界面,如图 1.7 所示
9、。图 1.7在“高级”选项卡中单击“环境变量”按钮。将出现“环境变量”设置界面,如图1.8 所示。图 1.8在“系统变量”框中选择“Path”,然后单击“编辑”按钮,在出现的“编辑系统变量”对话框中,在“变量值”栏的命令前添加“ D:jdkjdk1.5.0_06bin;”命令,如图1.9 所示。图 1.9用同样方法设置环境变量“classpath”,其值为“D:jdkjdk1.5.0_06lib;”命令。设置完成后,单击“开始”“运行”,在对话框中输入“cmd”,点击“确定”或键盘回车键后打开命令行窗口。在命令提示符下输入“java”或“javac”,回车后,如果出现其用法参数提示信息,则安装
10、正确,如图 1.10 所示。图 1.10为了在打开命令行窗口时可以直接进入包含你开发的 java 程序的路径下,下面以Windows 2000 为例说明设置过程。(1) 首先建立一个存放 java 源程序的路径和文件夹,如将实验中建立的 java 源程序都存放在为“d:javaprog”文件夹中。(2) 单击“开始”“所有程序”“附件”“命令提示符”,选择“命令提示符” 选项右击,在出现的下拉菜单中选择“属性”菜单,将打开“命令提示符 属性”对话框,如图 1.11 所示。图 1.11(3) 在“命令提示符 属性”对话框中选择“快捷方式”选项,在“起始位置”栏输入“d:javaprog”,单击“
11、确定”按钮。进行了上面的设置后,打开命令行窗口时将直接进入“ e:javaprog”路径下。如果没有进行上述设置,可使用 DOS 命令,直接输入“d:”按回车进入到d 盘,再输入“cd java”到 d 盘的 java 子目录下,再输入“ cd prog”即可到“ e:javaprog”路径下。3、 使用 EditPlus 编写源程序要编写 Java 程序,需要有文本编辑器。可以使用操作系统提供的 Edit 或记事本作为编辑器,最好选择 EditPlus 编辑软件,它可以使用不同颜色显示 Java 的关键字和类名,简单好用,同时可以对程序进行编译和运行。EditPlus 为共享软件,在教育网各
12、个软件下载网站都有下载。下载安装 EditPlus软件后打开 EditPlus 编辑软件,如图 1.17 所示,在其右边文本区输入如下代码。public class HelloJava public static void main(String args) System.out.println(Hello Java!);图 1.17将文件命名为 HelloJava.java,保存为文本文件格式文件,注意保存文件的路径。根据前面环境变量的设置,HelloJava.java 应该保存在“e:javaprog”的路径下。4、 使用 javac 命令编译源程序Java 源程序编写后,要使用Java
13、编译器(javac.exe)进行编译,将Java 源程序编译成可执行的程序代码。Java 源程序都是扩展名为 .java 的文本文件。编译时首先读入 Java 源程序,然后进行语法检查,如果出现问题就终止编译。语法检查通过后, 生成可执行程序代码即字节码,字节码文件名和源文件名相同,扩展名为 .class。可按照以下步骤操作:(1) 打开命令提示符窗口进入 Java 源程序所在路径。(2) 键入“javac HelloJava.java”,如图 1.18 所示。图 1.8(3) 按回车键开始编译(注意:文件名大小写敏感)。如果源程序没有错误,则屏幕上没 有输出,键入 “dir”按回车键后可在目
14、录中看到生成了一个同名字的.class 文件“Hello. class” ,如图 1.18 所示。否则,将显示出错信息。5、 使用 java 命令运行程序使用 Java 解释器(java.exe)可将编译后的字节码文件 HelloJava.class 解释执行。在命令提示符窗口键入“java HelloJava”,按回车键即开始解释并可看到运行结果,如果看到如图 1.19 所示结果,表明程序运行成功了,这是一种字符方式的应用程序其结果显示在屏幕。图 1.196、 在 EditPlus 中编译和运行程序EditPlus 中可以设置在后台运行 javac.exe 和 java.exe 或其它外部可
15、执行程序, 同时可以指定当前编辑的文件或其它内容作为外部程序的执行参数,并将外部程序运行 的结果显示在消息栏中,这可简化对 Java 程序编译和执行的操作,提高编程效率。(1) 打开 EditPlus ,单击“工具”“配置用户工具”菜单,如图 1.22 所示。图 1.22(2) 在打开的“参数设置”窗口如图 1.23、图 1.24 所示配置编译与运行环境。(a) 设置“编译”工具单击“组名称”按钮确定工具组的名称。单击“添加工具”按钮,从弹出的快捷菜 单中选择“程序文件”命令。在“菜单文字”栏中输入“编译”文字;在“命令”栏中 输入或通过文件夹选择 javac.exe 文件的路径;在“参数”栏
16、选择“文件名称”;在“初始目录”栏输入 Java 程序所在的路径。(b) 设置“运行”工具与(a)同样的方法可以设置“运行”工具。请同学自己练习。图 1.23图 1.24(3) 编译与运行设置工具后,在“工具”菜单下的下拉菜单中就可以对Java 程序进行编译与运行操作了。(a) 单击“工具”“编译”菜单,如图 1.25 所示。就开始对选中的程序进行编译处理。该过程要等一会儿。图 1.25(b) 编译通过后,可在右下方窗口看到编译结果,如图 1.26 所示。如果程序有问题, 会看到提示。图 1.26(c) 编译成功后,可运行该程序。单击“工具”“运行”菜单,如图 1.27 所示。图 1.27(d
17、) 运行成功后,可在右下方窗口看到程序的运行结果,如图 1.28 所示。图 1.28实验二Java 语言基础实验目的1、 了解Java 的数据类型;2、 掌握各种变量的声明方式;3、 理解运算符的优先级;4、 掌握Java 基本数据类型、运算符与表达式、数组的使用方法;5、 理解Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法;6、 通过以上内容,掌握Java 语言的编程规则。实验要求1、 编写一个声明Java 不同数据类型变量的程序;2、 编写一个使用运算符、表达式、变量的程序;3、 编写一个使用Java 数组的的程序;4、 编写表达式语句、复合语句的程序;5、 编
18、写使用不同选择结构的程序;6、 编写使用不同循环结构结构的程序。实验内容1、 声明不同数据类型的变量(1) 编写声明不同数据类型变量的程序文件 LX2_1.java,源代码如下。public class EXP2_1 public static void main(String args) byte b=0x55;short s=0x55ff; int i=1000000; long l=0xffffL; char c=a; float f=0.23F; double d=0.7E-3; boolean B=true;String S=这是字符串类数据类型; System.out.printl
19、n(字节型变量b = +b); System.out.println(短整型变量s = +s); System.out.println(整型变量 i = +i); System.out.println(长整型变量l = +l); System.out.println(字符型变量c = +c); System.out.println(浮点型变量f = +f); System.out.println(双精度变量d = +d); System.out.println(布尔型变量B = +B); System.out.println(字符串类对象S = +S);(2) 编译并运行该程序,结果如图 2.
20、1 所示。图 2.12、 了解变量的使用范围(1) 建立 EXP2_2.java 文件,通过本程序了解变量的使用范围,源代码如下。public class EXP2_2 static int i=10;public static void main(String args) int k=10; System.out.println(i=+i); System.out.println(k=+k);System.out.println(i=+i); System.out.println(k=+k);/编译时将出错,已出k的使用范围(2) 编译 EXP2_2.java此时会出现错误提示如图 2.2
21、所示。因为变量 k 在方法块中声明,在方法块之外它是不存在的,所以编译时会出错。图 2.2(3) 修改上面的程序(4) 成功运行该程序思考:EXP2_2.java 程序说明了什么问题?3、 使用关系运算符和逻辑运算符(1) 建立使用关系运算符和逻辑运算符的程序文件,源代码如下。class EXP2_3 public static void main(String args) int a=25, b=20, e=3, f=0;boolean d=ab; System.out.println(a=25,b=20,e=3,f=0);System.out.println(因为关系表达式a5)Syste
22、m.out.println(因为e非0 且a/e 为8 大于5,所以输出a/e +a/e); if (f!=0 & a/f5)System.out.println(a/f= +a/f); elseSystem.out.println(因为f值为0,所以输出f = +f);(2) 编译并运行该程序,结果如图 2.3 所示。4、 使用数组图 2.3(1) 建立使用数组的程序,本程序建立了一个长度为 5 的 1 维数组,一个长度为 12 的2 维数组,源代码如下。public class EXP2_4 public static void main(String args) int a=new in
23、t5;int arr1=new int34; a0=10;a1=10+a0; a2=30;a3=40;a4= a1+ a2;arr100=0; arr101=1; arr102=2;arr110=3; arr111=4; arr112=5;arr120=6; arr121=7; arr122=8;System.out.println(a+0+= +a0);System.out.println(a+1+= +a1);System.out.println(a+2+= +a2);System.out.println(a+3+= +a3);System.out.println(a+4+= +a4);S
24、ystem.out.println(arr1(+0+,+0+)= +arr100);System.out.println(arr1(+0+,+1+)= +arr101);System.out.println(arr1(+0+,+2+)= +arr102);System.out.println(arr1(+1+,+0+)= +arr110);System.out.println(arr1(+1+,+1+)= +arr111);System.out.println(arr1(+1+,+2+)= +arr112);(2) 编译并运行程序,结果如图 2.4 所示。5、 使用表达式语句与复合语句图 2.
25、4(1) 建立包含表达式语句程序,源代码如下。class EXP2_5public static void main(String args) int k, i=3, j=4;k=20*8/4+i+j*i; System.out.println(表达式(20*8/4+i+j*i)+k);(2) 建立包含复合语句程序,源代码如下。class EXP2_6public static void main(String args) int k, i=3, j=4;k=i+j;System.out.println(在复合块外的输出k=+k);float f; f=j+4.5F; i+;System.ou
26、t.println(在复合块内的输出f=+f); System.out.println(在复合块内的输出k=+k);System.out.println(在复合块外的输出i=+i);(3) 编译并运行上述两个源程序,结果如图 2.5、2.6 所示。(4) 将变量 i 在块内定义会怎样?改变其他变量的位置看看会发生什么变化。思考:指出程序的复合结构以及变量的使用范围。图 2.5图 2.66、 使用选择语句6.1 、 使 用 if.else 语 句(1) 程序功能:使用 if.else 语句构造多分支,判断某一年是否为闰年。闰年的条件是符合下面二者之一:能被 4 整除,但不能被 100 整除;能被
27、 4 整除,又能被100 整除。(2) 编写源程序文件,代码如下。public class EXP2_7 public static void main(String args) boolean leap;int year=2005;if (year%4=0 & year%100!=0) | (year%400=0) / 方法1 System.out.println(year+年是闰年);elseSystem.out.println(year+年不是闰年); year=2008; / 方法2if (year%4!=0) leap=false;else if (year%100!=0) leap
28、=true;else if (year%400!=0) leap=false;elseleap=true; if (leap=true)System.out.println(year+年是闰年); elseSystem.out.println(year+年不是闰年); year=2050; / 方法3if (year%4=0) if (year%100=0) if (year%400=0)leap=true;elseleap=false;elseleap=false;elseleap=false; if (leap=true)System.out.println(year+年是闰年); els
29、eSystem.out.println(year+年不是闰年);(3) 编译运行程序,其结果如图 2.7 所示。图 2.7思考:本程序中有几个选择语句,哪些具有嵌套关系? 6.2、 使用 switch 语句(1) 程序功能:在不同温度时显示不同的解释说明。(2) 程序源代码如下。class EXP2_8public static void main(String args) int c=38;switch (c10?1:c25?2:c35?3:4)case 1:System.out.println(+c+ 有点冷。要多穿衣服。); case 2:System.out.println(+c+ 正
30、合适。出去玩吧。); case 3:System.out.println(+c+ 有点热。); default:System.out.println(+c+ 太热了!开空调。);(3) 编译运行程序,其结果如图 2.8 所示。图 2.87、 使用循环语句7.1 、 for 循环语句练习(1) 程序功能:按 5 度的增量打印出一个从摄氏温度到华氏温度的转换表。(2) 程序源代码如下。class EXP2_9public static void main (String args) int h,c;System.out.println(摄氏温度华氏温度); for (c=0; c=40; c+=5
31、) h=c*9/5+32; System.out.println(+c+h);(3) 编译并运行程序,其结果如图 2.9 所示。7.2 、 while 循环语句练习图 2.9(1) 程序功能:运行程序后从键盘输入数字 1/2/3 后,可显示抽奖得到的奖品;如果输入其它数字或字符显示“没有奖品给你!”。(2) 程序源代码如下。import java.io.*; class EXP2_10 public static void main(String args) throws IOException char ch;System.out.println(按1/2/3 数字键可得大奖!); Syst
32、em.out.println(按Q键可退出循环操作.); while (ch=(char)System.in.read()!=) System.in.skip(2);/ 跳过回车键switch (ch) case 1: System.out.println(恭喜你得大奖,一辆汽车!); break;case 2: System.out.println(不错呀,你得到一台笔记本电脑!); break;case 3: System.out.println(没有白来,你得到一台冰箱!); break;case q:System.out.println(“欢迎下次再来!”); System.exit(
33、0);default:System.out.println(真不幸,你没有奖品!下次再来吧。);(3) 编译源程序。(4) 在命令提示符窗口运行程序,然后分别按 1、2、3、r 结果如图 2.10 所示。7.3 、 dowhile 循环语句练习图 2.10(1) 程序功能:求 12+100 之和,并将求和表达式与所求的和显示出来。(2) 程序源代码如下。class EXP2_11 public static void main(String args) int n=1, sum=0;do sum+=n+;while (n=100); System.out.println(1+2.+100=+s
34、um);(3)编译并运行程序,结果如图2.11 所示。图 2.117.4 、 多重循环练习(1) 输出九九乘法表的程序,源代码如下。public class EXP2_12public static void main(String args)int i,j,n=9; System.out.print(* |); for (i=1;i=n;i+)System.out.print(+i); System.out.print(n-|); for (i=1;i=n;i+)System.out.print();System.out.println(); for (i=1;i=n;i+)System.o
35、ut.print(+i+ |); for (j=1;j=i;j+)System.out.print(+i*j); System.out.println();(2) 编译并运行程序,结果如图 2.12 所示。图 2.12思考:观察输出的结果,发现九九表的行和列没有对齐,如何才能输出一张行列对齐的 九九表?实验三Java 语言面向对象基础实验目的通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方 法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握面向对象程序设计的方 法,了解类的继承性和多态性的作用,了解接口的作用。实验要求1、 编写一个体现面向对象思想的程
36、序;2、 编写一个创建对象和使用对象的方法的程序;3、 编写一个显示当前日期和时间的程序;4、 编写不同成员变量修饰方法的程序;5、 编写不同成员方法修饰方法的程序;6、 编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;7、 编写体现类的多态性(成员方法重载、构造方法重载)的程序;8、 编写体现接口功能的程序。实验内容1、 设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改(1) 程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车 主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员
37、方法来表示改 变汽车的速率和停车两个操作。(2) 程序源代码如下。public class EXP3_1 private String ownerName; /车主姓名private float curSpeed; /当前车速private float curDirInDegree; /当前方向盘转向角度public EXP3_1(String ownerName)this.ownerName=ownerName;public EXP3_1(String ownerName, float speed, float dirInDegree) this(ownerName);this.curSpe
38、ed=speed; this.curDirInDegree=dirInDegree;public String getOwnerName() /提供对车主姓名的访问return ownerName;public float getCurDirInDegree() /提供对当前方向盘转向角度的访问return curDirInDegree;public float getCurSpeed() /提供对当前车速的访问return curSpeed;public void changeSpeed(floatcurSpeed) /提供改变当前的车速this.curSpeed = curSpeed;public void stop() /提供停车this.curSpeed=0;(3) 编译源程序。2、 创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量)(1) 创建类EXP3_1的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使 用对象的方法来访问或修改对象的变量的值。(2) 程序代码如下。public class EXP3_2