《《Java面向对象程序设计》实训实验指导书.doc》由会员分享,可在线阅读,更多相关《《Java面向对象程序设计》实训实验指导书.doc(54页珍藏版)》请在三一办公上搜索。
1、Java面向对象程序设计实验指导书适用专业:计算机网络技术执 笔 人:周辉奎南昌工学院信息学院 编二一三年十月目 录实验项目一 Java开发环境搭建1实验项目二 Java语言基础8实验项目三 Java语言面向对象基础21实验项目四 图形用户界面的设计39实验项目五 异常处理44实验项目一 Java开发环境搭建一、实验目的和要求:(一)目的: 1、熟悉安装JDK、JRE;2、熟悉环境变量配置;3、熟悉Eclipse;4、掌握命令提示符运行第一个java程序。(二)要求: 1、认真做好实验前的各项准备工作,熟悉实验内容和机器操作流程。2、遵守实验室规章制度和实验课堂教学纪律。3、认真完成实验任务,
2、填写实验报告。二、实验时数:2学时三、实验器材:操作系统:Windows XP操作系统应用系统:Eclipse四、实验内容或步骤:实验1.1 Java开发环境搭建1、Java JDK安装单击Java JDK安装包,然后弹出提示框,点击下一步,直到选择安装目录如图1所示,将安装目录放在E:Javajdk1.6.0_35,然后继续下一步。图1 设定JDK安装目录JDK(Java开发工具)安装完成后,系统会自动安装JRE(Java 运行时环境),更改JRE的安装目录,将其与JDK放在同一目录下,如图2所示。图2 设定JRE安装目录安装完成后,出现如图2所示界面。图3 Java环境安装结束界面2、配置
3、环境变量Java JDK安装完成后,并不能立即使用,还需要配置相关环境变量。右键单击我的电脑属性弹出如下对话框,选择高级环境变量。图4 系统高级属性对话框首先,在系统变量中新建一个JAVA_HOME变量,该变量的值为JDK的安装目录。在此为E:Javajdk1.6.0_35。(与前面安装时指定目录一致)图4 JAVA_HOME环境变量设置注意:变量值后不需要加任何符号。然后在系统变量中查找path变量,如果存在,则将JDK安装目录下的bin文件夹添加其后,多个目录以分号隔开,如图5所示。如果不存在则新建一个,然后将bin目录放进去即可是E:Javajdk1.6.0_35bin;图5 在path
4、变量中添加Java bin目录新建classpath环境变量,该变量的值为JDK安装目录下lib目录,在此为:;%JAVA_HOME%lib。如图6所示。图6 classpath环境变量设定配置完成后,单击开始运行,输入cmd,如图7所示,确定,打开命令行窗口。图7 打开命令行窗口的命令在命令行窗口中输入java version命令,显示安装的Java 版本信息,如图8所示,则表明java JDK、 JRE安装成功。图8 Java JDK、 JRE安装测试结果在命令行窗口中输入javac命令,显示安装javac的一系列选项参数,如图9所示,则表明java开发环境搭建成功。图9 Java环境测试
5、结果【附录】利用命令提示符来运行Java程序:1、假设在F盘的文件夹javaexe有HelloWorld.java文件。【操作步骤】开始运行cmd,一步步按以下输入(注意:类名和编译文件名必须大小写一致)说明:javac命令表示编译;java命令表示运行。【总结】开发Java程序之前的JDK、JRE安装及环境配置一、先安装JDK、JRE,安装时必须都在同一个目录,假设在E:Javajdk1.6.0_35。安装完,用命令提示符测试安装是否正确。开始运行cmdjava version,如果显示JDK版本,则安装正确。二、配置环境变量1、右击我的电脑属性,选高级环境变量。2、在系统变量中新建一个变量
6、名为JAVA_HOME,变量值为 E:Javajdk1.6.0_353、在系统变量中查找path变量,如果存在,则将JDK安装目录下的bin文件夹添加其后,多个目录以分号隔开,E:Javajdk1.6.0_35bin;4、新建classpath环境变量,变量值为 ;%JAVA_HOME%lib环境变量配置完,用命令提示符测试配置是否正确。开始运行cmdjavac,如果显示javac的一系列选项参数,则表明java开发环境搭建成功。五、注意事项:1、注意使用javac命令编译源程序。2、注意使用java命令运行程序。六、练习项目及思考题:1、如何搭建java开发环境。实验项目二 Java语言基础
7、一、实验目的和要求:(一)目的: 1、 了解Java 的数据类型;2、 掌握各种变量的声明方式;3、 理解运算符的优先级;4、 掌握Java 基本数据类型、运算符与表达式、数组的使用方法;5、 理解Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法;6、 通过以上内容,掌握Java 语言的编程规则。(二)要求: 1、编写一个声明Java 不同数据类型变量的程序;2、编写一个使用运算符、表达式、变量的程序;3、编写一个使用Java 数组的的程序;4、编写表达式语句、复合语句的程序;5、编写使用不同选择结构的程序;6、编写使用不同循环结构结构的程序。二、实验时数:6学时三、
8、实验器材:操作系统:Windows XP操作系统应用系统:Eclipse四、实验内容或步骤:1、 实验2.1声明不同数据类型的变量(1) 编写声明不同数据类型变量的程序文件EXP2_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.ou
9、t.println(字节型变量 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) 编译并运行该程
10、序,结果如图2.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.
11、2 所示。因为变量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)Syst
12、em.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 所示。图 2.34、 使用数组(1) 建立使用数组的程序,本程序建立了一个长度为5 的1 维数组,一个长度为12 的2 维数组,源代码如下。public class EXP2_4 public static void main(String args) int a=new in
13、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
14、);System.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 所示。图 2.45、 使用表
15、达式语句与复合语句(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+;Sys
16、tem.out.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 整除;能被
17、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) / 方法1System.out.println(year+ 年是闰年);elseSystem.out.println(year+ 年不是闰年);year=2008; / 方法2if (year%4!=0)leap=false;else if (year%100!=0)leap=tr
18、ue;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+ 年是闰年);elseSyste
19、m.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+ 正合适。出去玩
20、吧。);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) h=c*9/5+
21、32;System.out.println(+c+h);(3) 编译并运行程序,其结果如图2.9 所示。图 2.97.2、 while 循环语句练习(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 数字键可得大奖!);System.out.println(
22、按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(0);default:System.o
23、ut.println(真不幸,你没有奖品!下次再来吧。);(3) 编译源程序。(4) 在命令提示符窗口运行程序,然后分别按1、2、3、r 结果如图2.10 所示。图 2.107.3、 dowhile 循环语句练习(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 =+sum);(3)编译并运行程序,结果如图2.11
24、 所示。图 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.out.print( +i+ |);for (j=1;
25、j=i;j+)System.out.print( +i*j);System.out.println();(2) 编译并运行程序,结果如图2.12 所示。五、注意事项:1、注意Java集成开发环境Eclipse的使用。2、注意Java程序编码方式及书写习惯。六、练习项目及思考题:1、观察输出的结果,发现九九表的行和列没有对齐,如何才能输出一张行列对齐的九九表?实验项目三 Java语言面向对象基础一、实验目的和要求:(一)目的: 1、通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想;2、了解类的封装方法,以及如何创建类和对象;3、了解成员变量和成员方法的特性;4、掌握面向对象程序设
26、计的方法;5、了解类的继承性和多态性的作用;6、了解接口的作用。(二)要求: 1、 编写一个体现面向对象思想的程序;2、 编写一个创建对象和使用对象的方法的程序;3、 编写一个显示当前日期和时间的程序;4、 编写不同成员变量修饰方法的程序;5、 编写不同成员方法修饰方法的程序;6、 编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;7、 编写体现类的多态性(成员方法重载、构造方法重载)的程序;8、编写体现接口功能的程序。二、实验时数:12学时三、实验器材:操作系统:Windows XP操作系统应用系统:Eclipse四、实验内容或步骤:1、 实验3.1设计类来描述真实客观世界中的事
27、物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改(1) 程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。(2) 程序源代码如下。public class EXP3_1 private String ownerName; /车主姓名 private float curSpeed; /当前车速 private float curDirInDegree; /当前方向盘转向角度 public EXP3_1(String ownerName)
28、 this.ownerName=ownerName; public EXP3_1(String ownerName, float speed, float dirInDegree) this(ownerName); this.curSpeed=speed; this.curDirInDegree=dirInDegree; public String getOwnerName() /提供对车主姓名的访问 return ownerName; public float getCurDirInDegree() /提供对当前方向盘转向角度的访问 return curDirInDegree; public
29、 float getCurSpeed() /提供对当前车速的访问 return curSpeed; public void changeSpeed(float curSpeed) /提供改变当前的车速 this.curSpeed = curSpeed; public void stop() /提供停车 this.curSpeed=0; (3) 编译源程序。2、 创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量)(1) 创建类EXP3_1的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对象的变量的值。(2) 程序代码如下。p
30、ublic class EXP3_2 public static void main(String args) EXP3_1 car=new EXP3_1(成龙,200f,25f); System.out.println(车主姓名: +car.getOwnerName(); System.out.println(当前车速: +car.getCurSpeed(); System.out.println(当前转向角度: +car.getCurDirInDegree(); car.changeSpeed(80); System.out.println(在调用changeSpeed(80)后,车速变为
31、: + car.getCurSpeed(); car.stop(); System.out.println(在调用stop()后, 车速变为: +car.getCurSpeed(); (3) 编译并运行,结果如图3.1所示。图 3.13、 编写显示当前时间和日期的程序(3) 程序功能:该程序通过使用一个自定义类Time,实现显示当前日期和时间的功能。(4) 程序代码如下。import java.util.Calendar;class Time private Calendar t;private int y, m, d, hh, mm, ss;Time ()t=Calendar.getInst
32、ance();y=t.get(t.YEAR);m=t.get(t.MONTH)+1;d=t.get(t.DATE);hh=t.get(t.HOUR_OF_DAY);mm=t.get(t.MINUTE);ss=t.get(t.SECOND);public String getDate() return y+ 年+m+月+d+日;public String getTime() return hh+ 时+mm+分+ss+秒;public class EXP3_3public static void main(String args)Time t=new Time();System.out.print
33、ln(当前日期:+t.getDate();System.out.println(当前时间:+t.getTime();(5) 编译并运行,结果如图3.2所示。图 3.24、 使用修饰符来限定类的成员变量或成员方法的属性有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下:public private protected package static final transient volatile不同修饰符的访问控制权限如表3.1 所示。访问权限修饰符类子类包所有类和包publicprivateprotectedpackage表 3.
34、1(1) 程序功能:通过两个类StaticDemo、EXP3_4 说明静态变量/方法与实例变量/方法的区别。(2) 程序源代码如下。class StaticDemo static int x;int y;public static int getX() return x;public static void setX(int newX) x = newX;public int getY() return y;public void setY(int newY) y = newY;public class EXP3_4 public static void main(String args) S
35、ystem.out.println(静态变量x=+StaticDemo.getX();System.out.println(实例变量y=+StaticDemo.getY(); /非法,编译时将出错StaticDemo a= new StaticDemo();StaticDemo b= new StaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println(静态变量a.x=+a.getX();System.out.println(实例变量a.y=+a.getY();System.out.println(静态变量b.x
36、=+b.getX();System.out.println(实例变量b.y=+b.getY();(3) 对上面的源程序进行编译,会出现如图3.3所示的出错提示。图 3.3(4) 将源程序中的出错语句删除或使用解释符/隐藏起来,例如,/System.out.println(实例变量y=+StaticDemo.getY();(5) 重新编译并运行该程序,结果如图3.4所示。图 3.45、 调用方法时参数传递的练习在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。传值调用即传递的参数是基本数据类型,调用方法时在方法
37、中将不能改变参数的值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。所以,如果不想改变参数的值,可以采用传值调用的方法。如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。5.1、编写一个传值调用的程序(1) 程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。(2) 程序源代码如下。class EXP3_5 public static void main(String args) int x=10, y=10;ff1(x,
38、 y);System.out.println(x=+x+, y=+y);static void ff1(int passX, int passY) passX=passX*passX;passY=passY*passY;System.out.println(passX=+passX+, passY=+passY);(3) 编译并运行,结果如图3.5。图 3.55.2、编写一个调用对象方法的程序(1) 程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。(2) 程序源代码如下。class EXP3_6 public static void main(String args) Power p=new Power();p.ff2(10,10);System.out.println(方法调用后 x=+p.x+, y=+p.y);class Powerint x=10, y=10;void ff2(int passX, int passY) System.out.println(初始时 x=+x+, y=+y);x=passX*passX;y=passY*passY;System.out.println(方法调用中 x=+x+, y=+y);(3) 编译并运行,结果如图3.6。图 3.66、 类的继承性练习新类可从现有的类中产生,并保留现有类的成员变量和方法并可根