1、Java 语言程序设计实验指导书(v1.5)作者 刘烁制订日期:2011 年 5 月 19 日更新日期:2013 年 6 月 30 日理论教材:Java 程序设计标准教程 第 1 版 邱加永 人民邮电出版社实验学时:24实验大纲:序号实验名称 内容要求实验学时每组人数实验属性开出要求1 Java 运行 环境通过在不同环境编译运行一个 Java 编程环境,认识 Java 程序结构。 2 1综合 必做2 基本编程语句编写程序,练习使用 Java 控制结构,实现循环嵌套与选择嵌套等复杂结构。 2 1 综合 必做3 对象 和类编写程序实现类和对象的操作,掌握构造函数与静态成员的使用。 4 1综合 必做
2、4 继承与多态 编写程序实现类的继承、多态的实现。 4 1 综合 必做5抽象 类、接口与内部类编写程序实现类的继承、与接口的编写。 2 1综合 必做6 异常编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 2 1综合 必做7 流用输入输出流实现从一个文本文件中读写简单数据。 2 1综合 必做8 泛型器与容 编程实现 set、list 与 map 的简单应用。 2 1 综合 必做9 图形用户界面用图形界面工具,结合事件处理机制,实现一个可视化的计算器。 4 1综合 必做10 JDBC 基础 使用 JDBC 方式执行数据库基本操作 2 1 综合 选做目 录实验一、JAVA 运行环境
3、1附录 1 Test1.java 11附录 2 Test2.java 11附录 3 Test3.java 11附录 4 Test4.java 11附录 5 Test5.java 11附录 6 Test6.java 11附录 7 Test7.java 12附录 8 Test8.java 12附录 9 Test9.java 12附录 10 Test10.java 12附录 11 Test11.java 12实验二、基本编程语句 .13实验三、对象和类(一) .15附录 1 ClassLoadTest.java17附录 2 PassValueTest.java17附录 3 StaticTest.ja
4、va .17实验三、对象和类(包) .19附录 1 Pclass.java .21附录 2 TestPackage.java .21附录 3 TestPackage.java .21实验三、对象 和类(二) .22实验四、继承与多态(一) .24附录 1 Employee.java .26附录 2 TestM.java.26附录 3 TestM.java.27实验四、继承与多态(二) .30实验五、抽象类、接口 .32附录 1 TestAbsctract.java .34实验六、异常 .35附录 1 NonException.java 37附录 2 CatchException.java37附
5、录 3 ThrowCatchException.java .37实验七、流 .38附录 1 FileExample.java.39附录 2 WriteFile.java 39附录 3 ReadFile.java.40附录 4 FileTools .java .40实验八、泛型与容器 .42附录 1 StringStack.java.44实验九、JAVA 图形用户界面(一) 45I实验九、JAVA 图形用户界面(二) 54附录 1 JFileChooser 代码片段 .57附录 2 JOptionPane 代码片段 57附录 3 SimpleTree.java.57附录 4 SimpleTabl
6、e.java.58实验十、JDBC .61附录 1 JdbcTest.java .62附录 2 jdbc.properties(MS SQL2000) .63附录 3 jdbc.properties(MS SQL2005) .630实验一、Java 运行环境1实验目的(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。(2)了解在该系统上如何编辑、编译、连接和运行一个 Java程序。(3)通过运行简单的 Java 程序,初步了解 Java 源程序的结构和特点。应学会在命令行和 Eclipse 环境下的编译、运行程序的方法。2实验内容和步骤(l)检查所用的计算机系统是否已安装了 JDK
7、,并确定它所在子目录。如果使用的是 Windows 操作系统,可以按以下步骤进行: 单击 Windows 桌面上的“开始“按钮,在菜单中 选择“程序“ “附录 “ “命令提示符 “命令;或者单击 Windows 桌面上的“开始“按钮,在菜单中 选择“ 运行“命令,在弹出的打开对话框中输入“cmd”回车,屏幕上即可出现“命令提示符“窗口。 在命令行窗口中输入“java”回车,如果有提示,表示本机器已安装 JRE,可以运行 Java 程序。根据提示,思考如何查看当前 JRE 的版本。 在命令行窗口中输入“javac”回车,如果有提示,表示本机器已安装 JDK 并且正确配置了环境变量,可以编译、运行
8、 Java 程序。1(2)在命令行环境下编译和运行 Java 程序(HelloWorld .java) 在 d 盘新建文件夹 myjava。 打开记事本工具,从键盘输入以下程序:/* 此类用于在屏幕上显示消息。*/public class HelloWorld /* 这是一个 main 方法*/public static void main(String args) /* 输出此消息 */System.out.println(“欢迎来到 Java 世界!“); 保存文件,点击菜单“另存为”命令,保存位置选择中建立的文件夹 myjava 下,文件名填写“HelloWorld.java ”,保存类
9、型一定要选“所有文件” 。 打开命令行窗口,将当前目录定位到保存的目录 运行“javac HelloWorld.java ”命令。 如果编译产生错误,根据给出的错误提示修改源程序,再进行编译。重复此过程,直到编译完全正确为止。 使用资源管理器打开源文件保存的目录,观察 class 文件2的名字。 在命令行窗口运行“java HelloWorld”命令,分析程序运行结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上至步骤。(3)按照以上方法完成以下练习。 用最快的速度调试附录 111 的多个程序直至正确运行,分别记录其错误原因、调试过程及最终运行结果。 (提示:可以复制
10、粘贴源代码) 在不看任何提示的情况下,自己单独编写一个最简单的HelloWorld 类。 (警告:一定不要复制粘贴或照抄代码,否则没有任何意义)(4)检查所用的计算机系统是否已安装了 Eclipse,并确定它所在子目录。(5)在 Eclipse 环境下编译和运行 Java 程序,在第一次上机时,按以下步骤建立和运行 Java 程序: 先进入 Eclipse 环境。3 点击菜单“File” “new”“project.”,在弹出的窗口中选择工程类型 Java project,点击 next 按钮;填写工程名 “myjava”,点击“Finish ”按钮结束。456 在左侧工程文件夹 myjava
11、 上点右键,点击“New”“Class”;在弹出的窗口,填写类名“MyCalss” ,点击“Finish”按钮结束。789 参照以下代码补充 Eclipse 自动生成的源文件public class MyClass String name;public MyClass (String name)this.name=name;private void show()System.out.println(“Hello,“+name); public static void main(String args) MyClass h=new MyClass (“张三“);h.show(); 在项目窗口中选
12、择要运行的类 MyClass 类,右键后选择“run as”“ Java Application”运行该类。 观察和分析编译信息观察屏幕的变化。在输出窗口应显示程序运行结果。分析结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上至步骤。103 预习和复习内容教材第 2 章,希望大家能在实验中多思考,多给自己提问题,多设想几种可能。做实验时不要满足于验证书本知识。在以后的实验中,请读者自己设计具体的实验步骤,尽可能自己补充增加一些内容,以提高自己的实践能力。11附录 1 Test1.javapublic class Test1public static void mai
13、n(String args) System.out.println(“欢迎来到 Java 世界!“) 附录 2 Test2.javapublic class Test2public static void main(String args) system.out.println(“欢迎来到 Java 世界!”) ;附录 3 Test3.javapublic class Test3public static void main(string args) System.out.println(“欢迎来到 Java 世界!“);附录 4 Test4.javapubilc class Test4pub
14、lic static void mian(String args) system.out.println(“欢迎来到 Java 世界!“);附录 5 Test5.javapublic class Test5public static int main(String args) System.out.println(“欢迎来到 Java 世界!“);附录 6 Test6.javapublic class Test6public void main(String args) System.out.println(“欢迎来到 Java 世界!“);12附录 7 Test7.javapublic cl
15、ass Test7public static void main() System.out.println(“欢迎来到 Java 世界!“);附录 8 Test8.javapublic class Test8static void main(String args) System.out.println(“欢迎来到 Java 世界!“);附录 9 Test9.javapublic class Test9public static void main(String args) System.out.println(“欢迎来到 Java 世界!“);附录 10 Test10.javapublic
16、class Test10public static void main(String baidu) System.out.println(“欢迎来到 Test10 世界!“);附录 11 Test11.javaclass Test11public static void main(String google) System.out.println(“欢迎来到 Test11 世界!“);13实验二、基本编程语句1实验目的(1)掌握简单的 Java 程序的编写和调试方法。(2)掌握 Java 程序中使用最多的语句赋值语句和输入输出的使用方法。(3)掌握结构化程序的 3 种基本结构(顺序结构、选择结
17、构、循环结构)在 Java 中的实现。2实验内容和步骤上机输入程序并调试运行程序。(1)分析以下代码会打印哪些内容,并通过程序验证自己的判断:a)public class Elementary public static void main(String args) int i=1234578900+987543210;System.out.println(i);long j=1234578900+987543210;System.out.println(j);long k=1234578900+987543210L;System.out.println(k);long l=123457890
18、0L+987543210L;System.out.println(l);b)public class Elementary2 public static void main(String args) System.out.println(“H“+“Bird“);System.out.println(H+“Bird“);String s=“;char c=65;14int i=1;System.out.println(c);System.out.println(i);System.out.println(c+1);System.out.println(c+);System.out.println
19、(c+i);System.out.println(s+c);System.out.println(s+i);System.out.println(s+c+i);System.out.println(i+c+s);s=s+i;System.out.println(s);s=s+c;System.out.println(s);c)import javax.swing.*;public class Option public static void main(String args) String name=JOptionPane.showInputDialog(“what is your name
20、?“);String input=JOptionPane.showInputDialog(“how old are you?“);int age=Integer.parseInt(input);String title=“your infomation“;String message=“dear “+name+“, you are “+age+“ years old.“;JOptionPane.showConfirmDialog(null,message, title,JOptionPane.CLOSED_OPTION);(2)从键盘输入三个数字,可以按其大小正序、逆序输出。(3)从键盘输入边
21、长,求一个矩形的面积和周长并输出。(4)完成课本 p57 页,二大题 1、2、5、6 的编程任务。(5)已知一个 N*N 的矩阵, N 和矩阵中的值均从键盘输入,编程实现矩阵的转置并输出转换前后的矩阵。 (用二维数组保存矩阵)15实验三、对象和类(一)1实验目的(1)结合面向对象思想掌握类的定义以及类中成员的定义,学会设计自己的类。(2)掌握方法重载、尤其是构造方法的重载,深入理解构造方法的作用与调用时机。(3)理解 this 关键字同 static 关键字的意义,掌握成员变量的具体隐藏实现。(4)理解对象同对象引用间的区别,掌握创建对象与调用对象成员的方法,以及对象作为参数与基本数据类型变量
22、做参数的区别。2实验内容和步骤上机输入程序并调试运行程序。(1)编译并运行附录 1 和附录 2,观察结果分析其原因。(2)编译附录 3,分析结果;将“注释这行”所在的行注释,再次编译,观察结果分析其原因;再将注释的 call2 方法和 main 方法中的“StaticTest.call2(obj);”去掉注释,再次编译,观察结果分析其原因。(3)定义一个圆类 Circle,至少具有私有成员变量:radius(double 型,用于保存半径) 、area( double 型,用于保存面积)、length(double 型,用于保存周长) ,以及成员方法setRadius、getRadius (用
23、于设置、获取半径) 、getArea (用于获得面16积) 、getLength(用于获取周长) 、print(打印圆对象的半径、面积、周长信息) 。(a)在 main 方法,要求方法中通过“Circle c1=new Circle(); Circle c2=new Circle(100);”分别新建半径为 1 和半径为 100 的圆对象,分别打印 c1 同 c2 的信息;(b)使 c2 的半径等于 c1 的半径,使 c1 的半径等于原 c2 的半径,分别打印 c1 同 c2 的信息。(4)定义一个日期类 MyDate,至少具有私有成员变量:year、month 、day ,以及成员方法 se
24、tYear、 getYear 等(隐藏具体实现方法,用于设置、获取成员变量) 、isRunyear(boolean 型,判断当前对象保存的年是否为闰年) 、print(打印日期对象的年 月日信息) 。(a)在 main 方法,要求方法中通过“MyDate d1=new MyDate(); MyDate d2=new MyDate(2009,4,1);”分别新建年月日为 1i999 年 1月 1 日的日期对象和年月日为 2009 年 4 月 1 日的日期对象,分别打印 d1 同 d2 的信息;(b)使 d2 的年等于 d1 的年,使 d1 的月等于原 d2 的月,分别打印 d1 同 d2 的信息
25、。17附录 1 ClassLoadTest.javapublic class ClassLoadTeststaticSystem.out.println(“class loding“);public static void main(String args) 附录 2 PassValueTest.javapublic class PassValueTest private int i = -100;public void test1(int b) b = 200;public void test2(PassValueTest b) b.i = 100;public void test3(Pas
26、sValueTest b) b = this;public static void main(String args) PassValueTest obj = new PassValueTest();int temp = 100;obj.test1(temp);System.out.println(temp);obj.test2(obj);System.out.println(obj.i);PassValueTest newobj = new PassValueTest();obj.test3(newobj);System.out.println(newobj.i);附录 3 StaticTe
27、st.javapublic class StaticTest public static void call1()staticmethod();nonstaticmethod(); /注释这行/*18public static void call2(StaticTest o1)o1.nonstaticmethod();StaticTest o2=new StaticTest ();o2.nonstaticmethod();*/public void nonstaticmethod()System.out.println(“非静态方法被调用“);public static void static
28、method()System.out.println(“静态方法被调用“);public static void main(String arg)StaticTest obj=new StaticTest ();StaticTest.call1();/ StaticTest.call2(obj);19实验三、对象和类(包)1实验目的(1)理解包的意义,学会定义、编译和运行一个包内的类,熟练掌握外部包中具体类和全部类的导入方式,理解包带来的一种新的 java 访问控制机制。2实验内容和步骤(1)在 Eclipse 集成开发环境中分别新建名为com.yourname.ch3 和 com.yourn
29、ame.other 的两个包。(2)将附录 1、附录 2、附录 3 添加到工程中,注意附录 1 和附录 2 应该放在名为“com.yourname.ch3”的包中,附录 3 应放在名为“com.yourname.other”的包中。分别调试 3 个源文件,保证都能编译成功。1 在附录 2、附录 3 的 main 方法中添加语句 “Pclass pc=new Pclass();”,分别编译它们会出现什么结果,说明什么?2 将附录 3 中的“Pclass pc=new Pclass();”改为“com.yourname.ch3.Pclass pc=new com.yourname.ch3.Pcla
30、ss();”再编译会出现什么结果,为什么?用 import 导入包 com.yourname.ch3 后,再改为“Pclass pc=new Pclass();”可否通过编译?3 在附录 2、附录 3 的 main 方法中继续添加语句 “Dclass dc=new Dclass();”,分别编译它们会出现什么结果,说明什么?从附录 3 删除“Dclass dc=new Dclass();”,保证附录 3 能编译通过。4 在附录 2、附录 3 的 main 方法中继续添加语句20“pc.method1();”,分别编译它们会出现什么结果,说明什么?5 在附录 2、附录 3 的 main 方法中继
31、续添加语句: “pc.method1();pc.method2();pc.method3();pc.method4();”分别编译它们会出现什么结果说明什么(仔细分析两个编译结果的不同之处)?删除不可执行的语句确保保证附录2、3 都能编译通过。6 在附录 2 的 main 方法中继续添加语句: “dc.method1();dc.method2();dc.method3();dc.method4();”编译附录 2 会出现什么结果说明什么? 21附录 1 Pclass.javapackage com.yourname.ch3;class Dclass /default classpublic v
32、oid method1()System.out.println(“public method of a defalut class in package p5“);protected void method2()System.out.println(“protected method of a defalut class in package p5“);void method3()System.out.println(“defalut method of a defalut class in package p5“);private void method4()System.out.print
33、ln(“private method of a defalut class in package p5“);public class Pclass /public classpublic void method1()System.out.println(“public method of a public class in package p5“);protected void method2()System.out.println(“protected method of a public class in package p5“);void method3()System.out.prin
34、tln(“defalut method of a public class in package p5“);private void method4()System.out.println(“private method of a public class in package p5“);附录 2 TestPackage.javapackage com.yourname.ch3;public class TestPackagepublic static void main(String rgs)附录 3 TestPackage.javapackage com.yourname.other;pu
35、blic class TestPackagepublic static void main(String rgs)22实验三、对象和类(二)1实验目的(1)结合面向对象思想掌握类的定义以及类中成员的定义,学会设计自己的类。(2)掌握方法重载、尤其是构造方法的重载,深入理解构造函数的作用与调用时机。(3)理解 this 关键字同 static 关键字的意义,掌握成员变量的具体隐藏实现。(4)理解对象同对象引用间的区别,掌握创建对象与调用对象成员的方法,以及对象作为参数与基本数据类型变量做参数的区别。2实验内容和步骤上机输入程序并调试运行程序。(1(定义一个圆柱体类 Cylinder,至少具有私有
36、成员变量:height(double 型, 用于保存高) 、radius (double 型,用于保存半径) ,以及成员方法 setRadius、getRadius 等、 getArea(用于获得表面积) 、getTj(用于获得体积) 、print(打印对象的高、半径、体积、底面积信息) 。在 main 方法,要求方法中通过 “Cylinder y1=new Cylinder(); Cylinder y2=new Cylinder(100, 20);”分别新建高为 1、底面半径为 1 和高为 100,底面半径为 20 的圆柱体对象,分别打印 y1同 y2 的信息;(2(在上一节实验中,曾经定义
37、过一个圆类 Circle,请在它的基23础之上,重写编写(1)中的圆柱体类 Cylinder。提示,可以利用 Circle 类的对象表示圆柱体的底。(3(定义一个学生类 Student,要求其包含 name(String 类型,保存姓名) 、birthday(上一节定义过的 MyDate 类型,用以保存生日)以及成员方法 set、get 等、print(打印对象信息) 。在 main 方法,要求方法中通过“Student s1= new Student(); ”新建姓名为“default“、生日为 1999 年 1 月 1 日的对象,再通过类似“Student s2=new Student(“
38、张三 “,1989,7,7); ”的方法新建与你自己信息相同的学生对象,分别打印 s1 同 s2 的信息;添加新的构造方法,以便能够通过“Student s3=new Student(“张三“,new MyDate(); Student s4=new Student(“张三 “,new MyDate(2009,4,1); ”语句创建两个新对象,并分别打印其信息;(4(在 Cylinder 和 Student 的默认构造方法中应用 this 方法,使之自身不包含初始化语句,而是通过自定义构造方法初始化成员变量。(5(根据个人能力选择实现数据结构一课中学过的栈Mystack 或单链表 MyLink
39、List。 (此题不写在实验报告中)24实验四、继承与多态(一)1实验目的(1)结合面向对象思想,熟练掌握子类的定义以及子类构造方法的定义,理解子类构造函数调用顺序。(2)掌握父类方法的重写、深入理解子类中对父类成员的访问权限。(3)理解 Object 的意义,掌握自定义类的 toString()、equals()方法的实现。(4)理解向上转型和向下转型,以及多态的目的和意义,掌握多态的常用形式。2实验内容和步骤(1)在上一次实验中,曾经定义过圆类 Circle、日期类MyDate,请重写它们 toString 和 equals 方法。在 main 方法中新建c1、 c2 两个默认 Circl
40、e 对象,d1、d2 两个默认 MyDate 对象,分别通过 equals 方法比较;通过 set 方法修改 c2 和 d2 的成员变量值后,再分别通过 equals 方法比较;注意,应比较重写 toString 方法前后,System.out.println(c1);System.out.println(d1)的结果。(2)已知 Employee 类的定义(附录 1),为其编写一个子类TempEmployee,其基本工资为 500,计算工资办法为:工资=基本工资+奖金;如需要可以修改 Employee 类属性的访问修饰符。(3)调试 TestM.java(附录 3 ),掌握向上转型与向下转型;25(4)分析 TestM.java(附录 2 ),Swan 重写了父类的若干方法,其中哪些重写不成功,为什么?