Java程序设计实验指导书

更新时间:2024-05-22 23:45:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java语言程序设计实验指导书(v1.7)

作者 刘烁

制订日期:2011年5月19日 更新日期:2013年12月6日

理论教材:《Java程序设计标准教程》 第1版 邱加永 人民邮电出版社 实验学时:36 实验大纲: 序号 实验名称 内容要求 通过在不同环境编译运行一个Java编程环境,认识Java程序结构。 编写程序,练习使用Java控制结构,实现循环嵌套与选择嵌套等复杂结构。 编写程序实现类和对象的操作,掌握构造函数与静态成员的使用。 实验 每组 实验 开出 学时 人数 属性 要求 2 1 综合 必做 1 Java运行环境 2 基本编程语句 4 1 综合 必做 3 对象和类 4 继承与多态 5 4 1 综合 必做 1 综合 必做 1 综合 必做 编写程序实现类的继承、多态的实现。 4 4 抽象类、接口与编写程序实现类的继承、与接口的编内部类 写。 编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 用输入输出流实现从一个文本文件中读写简单数据。 6 异常 2 1 综合 必做 7 流 8 泛型与容器 9 图形用户界面 10 JDBC基础 11 网络编程 2 1 综合 必做 1 综合 必做 1 综合 必做 1 综合 必做 1 综合 必做 编程实现set、list与map的简单应用。 4 用图形界面工具,结合事件处理机制,实现一个可视化的计算器。 使用JDBC方式执行数据库基本操作 编程实现基于UDP和TCP的通讯。 6 2 2 目 录

实验一、JAVA运行环境 ..................................................................................................................... 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 实验二、基本编程语句 .................................................................................................................... 13 实验三、对象和类(一) ................................................................................................................ 13 附录1 ClassLoadTest.java ............................................................................................................. 19 附录2 PassValueTest.java ............................................................................................................. 19 附录3 StaticTest.java .................................................................................................................... 19 实验三、对象和类(包) ................................................................................................................ 21 附录1 附录2 附录3

Pclass.java ..................................................................................................................... 23 TestPackage.java ........................................................................................................... 23 TestPackage.java ........................................................................................................... 23

实验三、对象和类(二) ................................................................................................................ 24 实验四、继承与多态(一) ............................................................................................................ 26 附录1 Employee.java .................................................................................................................... 28 附录2 TestM.java .......................................................................................................................... 28 附录3 TestM.java .......................................................................................................................... 29 实验四、继承与多态(二) ............................................................................................................ 32 实验五、抽象类、接口 .................................................................................................................... 34 附录1

TestAbsctract.java ......................................................................................................... 36

实验六、异常 .................................................................................................................................... 37 附录1 NonException.java ............................................................................................................. 39 附录2 附录3

CatchException.java ...................................................................................................... 39 ThrowCatchException.java ........................................................................................... 39

实验七、流 ........................................................................................................................................ 40 附录1 FileExample.java ................................................................................................................ 42 附录2 WriteFile.java ..................................................................................................................... 42 附录3 ReadFile.java ...................................................................................................................... 43 附录4 FileTools .java .................................................................................................................... 43 实验八、泛型与容器 ........................................................................................................................ 45 附录1

StringStack.java ............................................................................................................. 47

实验九、JAVA图形用户界面(一)................................................................................................ 48 实验九、JAVA图形用户界面(二)................................................................................................ 57

I

附录1 JFileChooser代码片段 ...................................................................................................... 60 附录2 JOptionPane代码片段 ...................................................................................................... 60 附录3 SimpleTree.java .................................................................................................................. 60 附录4 SimpleTable.java ................................................................................................................ 61 实验十、JDBC .................................................................................................................................. 64 附录1 JdbcTest.java ...................................................................................................................... 65 附录2 jdbc.properties(MS SQL2000) ...................................................................................... 66 附录2 jdbc.properties(MS SQL2005) ...................................................................................... 66

II

实验一、Java运行环境

1.实验目的

(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。

(2)了解在该系统上如何编辑、编译、连接和运行一个Java程序。

(3)通过运行简单的Java程序,初步了解Java源程序的结构和特点。

应学会在命令行和Jbuilder 2005环境下的编译、运行程序的方法。

2.实验内容和步骤

(l)检查所用的计算机系统是否已安装了JDK,并确定它所在子目录。如果使用的是Windows操作系统,可以按以下步骤进行:

单击Windows桌面上的\开始\按钮,在菜单中 选择\命令

提示符\命令;或者单击Windows桌面上的\开始\按钮,在菜单中 选择\运行\命令,在弹出的打开对话框中输入“cmd”回车,屏幕上即可出现\命令提示符\窗口。

在命令行窗口中输入“java”回车,如果有提示,表示本

机器已安装JRE,可以运行Java程序。根据提示,思考如何查看当前JRE的版本。

在命令行窗口中输入“javac”回车,如果有提示,表示本

机器已安装JDK并且正确配置了环境变量,可以编译、运行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”,保存类型一定要选“所有文件”。

打开命令行窗口,将当前目录定位到③保存的目录

⑤ ⑤

运行“javac HelloWorld.java”命令。

如果编译产生错误,根据给出的错误提示修改源程序,再

进行编译。重复此过程,直到编译完全正确为止。

使用资源管理器打开源文件保存的目录,观察class文件的

2

名字。

在命令行窗口运行“java HelloWorld”命令,分析程序运行

结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上④至⑦步骤。

(3)按照以上方法完成以下练习。 ①

用最快的速度调试附录1—9的多个程序直至正确运行,分

别记录其错误原因、调试过程及最终运行结果。(提示:可以复制粘贴源代码)

在不看任何提示的情况下,自己单独编写一个最简单的

HelloWorld类。(警告:一定不要复制粘贴或照抄代码,否则没有任何意义)

(4)检查所用的计算机系统是否已安装了Eclipse,并确定它所在子目录。

(5)在Eclipse环境下编译和运行Java程序,在第一次上机时,按以下步骤建立和运行Java程序:

先进入 Eclipse环境。

3

② 点击菜单“File”—>“new”—>“project...”,在弹出的窗

口中选择工程类型Java project,点击next按钮;填写工程名 “myjava”,点击“Finish”按钮结束。

4

5

6

③ 在左侧工程文件夹myjava上点右键,点击“New”—>“Class”;在弹出的窗口,填写类名“MyCalss”,点击“Finish”按钮结束。

7

8

④ 参照以下代码补充Eclipse自动生成的源文件

public class MyClass { String name;

public MyClass (String name){ this.name=name; }

private void show(){

System.out.println(\ }

public static void main(String[] args) { MyClass h=new MyClass (\张三\ h.show(); } }

⑤ 在项目窗口中选择要运行的类MyClass类,右键后选择“run

as”→“Java Application”运行该类。

观察和分析编译信息观察屏幕的变化。在输出窗口应显示

程序运行结果。分析结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上④至⑧步骤。

9

3 .预习和复习内容

教材第2章,希望大家能在实验中多思考,多给自己提问题,多设想几种可能。做实验时不要满足于验证书本知识。在以后的实验中,请读者自己设计具体的实验步骤,尽可能自己补充增加一些内容,以提高自己的实践能力。

10

附录1 Test1.java

public class Test1{

public static void main(String [] args) {

System.out.println(\欢迎来到 Java 世界!\ } }

附录2 Test2.java

public class Test2{

public static void main(String [] args) {

system.out.println(“欢迎来到 Java 世界!”); } }

附录3 Test3.java

public class Test3{

public static void main(string [] args) {

System.out.println(\欢迎来到 Java 世界!\ } }

附录4 Test4.java

pubilc class Test4{

public static void mian(String [] args) {

system.out.println(\欢迎来到 Java 世界!\ } }

附录5 Test5.java

public class Test5{

public static int main(String [] args) {

System.out.println(\欢迎来到 Java 世界!\ } }

附录6 Test6.java

public class Test6{

public void main(String [] args) {

System.out.println(\欢迎来到 Java 世界!\ } }

11

附录7 Test7.java

public class Test7{

public static void main() {

System.out.println(\欢迎来到 Java 世界!\ } }

附录8 Test8.java

public class Test8{

static void main(String [] args) {

System.out.println(\欢迎来到 Java 世界!\ } }

附录9 Test9.java

public class Test9{ }

public static void main(String [] args) {

System.out.println(\欢迎来到 Java 世界!\}

附录10 Test10.java

public class Test10{

public static void main(String [] baidu) {

System.out.println(\欢迎来到 Test10世界!\} }

class Test11{

public static void main(String [] google) {

System.out.println(\欢迎来到 Test11世界!\} }

12

实验二、基本编程语句(一)

1.实验目的

(1)掌握简单的Java程序的编写和调试方法。

(2)掌握Java程序中使用最多的语句― 赋值语句和输入输出的使用方法。

(3)掌握结构化程序的3种基本结构(顺序结构、选择结构、循环结构)在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=1234578900L+987543210L; System.out.println(l); } }

b)

public class Elementary2 {

public static void main(String[] args) {

System.out.println(\ System.out.println('H'+\ String s=\ char c=65;

13

} }

int i=1;

System.out.println(c); System.out.println(i); System.out.println(c+1); System.out.println(c++); System.out.println(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(\ String input=JOptionPane.showInputDialog(\ int age=Integer.parseInt(input); String title=\ String message=\ JOptionPane.showConfirmDialog(null,

message, title,JOptionPane.CLOSED_OPTION); } }

(2)编程从键盘输入1个整数,计算其平方值并输出。 (3)编程从键盘输入2个不同的整数,按照从小到大顺序输出。 (4)编程从键盘输入一个整数,在屏幕上打印出它的阶乘。 (5)编程从键盘输入10个实数到数组,分别统计正数的和、负数的和,然后输出统计结果。

3.预习和复习内容 教材第3章。

14

实验二、基本编程语句(二)

1.实验目的

(1)掌握简单的Java程序的编写和调试方法。

(2)掌握Java程序中使用最多的语句― 赋值语句和输入输出的使用方法。

(3)掌握结构化程序的3种基本结构(顺序结构、选择结构、循环结构)在Java中的实现。

(3)掌握字符串和数组的常用属性和方法。 2.实验内容和步骤

(1)根据个人水平完成以下一组编程题并调试运行程序。 基础题

① 从键盘输入3个不同整数,按照从小到大顺序输出。(程序中

不能使用循环)

② 从键盘录入5个整数,然后由大到小排序。(必须使用循环)

③ 编程在屏幕上打印出100以内的所有素数。

④ 从键盘输入12个数存入二维数组(3*4)中,编写程序求出

最大元素的值及它所在的行号和列号。 ⑤ 见电子附件attach2-1.rar 进阶题

① 基础题最后一道题

② 从键盘输入7个数存入二维数组中,编写程序求出最大元素

的值及它所在的行号和列号。

15

③ 采用二维数组输入多个学生三门课的成绩,分别求出每个学

生的平均成绩和每门课的成绩。

④ 编写猜数游戏,在程序中设定一个整数,从键盘上反复由其

他用户输入数据进行猜测。如果未猜中,程序提示输入过大或者过小;如果猜中,则输出猜的次数,最多允许猜5次。 ⑤ 将以上程序中设定的整数换为随机数。(提示:查找学习

java.util.Random类的用法) 3.预习和复习内容 教材第3章。

16

实验三、对象和类(一)

1.实验目的

(1)结合面向对象思想掌握类的定义以及类中成员的定义,学会设计自己的类。

(2)掌握方法重载、尤其是构造方法的重载,深入理解构造函数的作用与调用时机。

(3)理解this关键字同static关键字的意义,掌握成员变量的具体隐藏实现。

(4)理解对象同对象引用间的区别,掌握创建对象与调用对象成员的方法,以及对象作为参数与基本数据类型变量做参数的区别。

2.实验内容和步骤

上机输入程序并调试运行程序。

(1)编译并运行附件1和附件2,观察结果分析其原因。 (2)编译附件3,分析结果;将“注释这行”所在的行注释,再将注释的call2方法和main方法中的“StaticTest.call2(obj);”去掉注释,再次编译,观察结果分析其原因。

(3)定义一个圆类Circle,至少具有私有成员变量:radius(double型,用于保存半径)、area(double型,用于保存面积)、length(double型,用于保存周长),以及成员方法setRadius、getRadius(用于设置、获取半径)、getArea(用于获得面积)、getLength(用于获取周长)、print(打印圆对象的半径、面积、周长信息)。

a) 在main方法,要求方法中通过“Circle c1=new Circle();

17

Circle c2=new Circle(100);”分别新建半径为1和半径为100的圆对象,分别打印c1同c2的信息;

b) 使c2的半径等于c1的半径,使c1的半径等于原c2的半径,分别打印c1同c2的信息;

(4)定义一个日期类MyDate,至少具有私有成员变量:year、month、day,以及成员方法setYear、getYear等(具体隐藏实现方法,用于设置、获取成员变量)、isRunyear(boolean型,判断当前对象保存的年是否为闰年)、print(打印日期对象的年\\月\\日信息)。

a) 在main方法,要求方法中通过“MyDate d1=new MyDate(); MyDate d2=new MyDate(2009,4,1);”分别新建年月日为1999年1月1日的日期对象和年月日为2009年4月1日的日期对象,分别打印d1同d2的信息;

(5)使d2的年等于d1的年,使d1的月等于原d2的月,分别打印d1同d2的信息;

3.预习和复习内容 教材第4章。

18

附录1 ClassLoadTest.java

package ch3;

public class ClassLoadTest{ static{ System.out.println(\ }

public static void main(String [] args) {

} }

附录2 PassValueTest.java

package ch3;

public class PassValueTest { private int i = -100; public void test1(int b) { b = 100; } public void test2(PassValueTest b) { b.i = 100; } public void test3(PassValueTest 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); obj.i=100; PassValueTest newobj = new PassValueTest(); obj.test3(newobj); System.out.println(newobj.i); } }

附录3 StaticTest.java

package ch3;

public class StaticTest { public static void call1(){

19

/* */ }

}

staticmethod();

nonstaticmethod(); //注释这行

public static void call2(StaticTest o1){ o1.nonstaticmethod(); StaticTest o2=new StaticTest (); o2.nonstaticmethod(); }

public void nonstaticmethod(){ System.out.println(\非静态方法被调用\}

public static void staticmethod(){ System.out.println(\静态方法被调用\}

public static void main(String[] arg){ StaticTest obj=new StaticTest (); StaticTest.call1(); StaticTest.call2(obj); }

20

实验三、对象和类(包)

1.实验目的

(1)理解包的意义,学会定义、编译和运行一个包内的类,熟练掌握外部包中具体类和全部类的导入方式,理解包带来的一种新的java访问控制机制。

2.实验内容和步骤

(1)在NetBeans或Eclipse等其他集成开发环境中分别新建名为com.yourname.ch3和com.yourname.other的两个包。

(2)将附件1、附件2、附件3添加到工程中,注意附件1和附件2应该放在名为“com.yourname.ch3”的包中,附件3应放在名为“com.yourname.other”的包中。分别调试3个源文件,保证都能编译成功。

① 在附件2、附件3的main方法中添加语句“Pclass pc=new Pclass();”,分别编译它们会出现什么结果,说明什么?

② 将附件3中的“Pclass pc=new Pclass();”改为“com.yourname.ch3.Pclass pc=new com.yourname.ch3.Pclass();”再编译会出现什么结果,为什么?用import导入包com.yourname.ch3后,再改为“Pclass pc=new Pclass();”可否通过编译?

③ 在附件2、附件3的main方法中继续添加语句“Dclass dc=new Dclass();”,分别编译它们会出现什么结果,说明什么?从附件3删除“Dclass dc=new Dclass();”,保证附件3能编译通过。

④ 在附件2、附件3的main方法中继续添加语句

21

“pc.method1();”,分别编译它们会出现什么结果,说明什么?

⑤ 在附件2、附件3的main方法中继续添加语句:“

pc.method1();

pc.method2(); pc.method3(); pc.method4();

”分别编译它们会出现什么结果说明什么(仔细分析两个编译结果的不同之处)?删除不可执行的语句确保保证附件2、3都能编译通过。

⑥ 在附件2的main方法中继续添加语句:“

dc.method1(); dc.method2(); dc.method3(); dc.method4();

”编译附件2会出现什么结果说明什么? 3.预习和复习内容 教材第4章

22

附录1 Pclass.java

package com.yourname.ch3; class Dclass { //default class public void method1(){ System.out.println(\ } protected void method2(){ System.out.println(\ } void method3(){ System.out.println(\ } private void method4(){ System.out.println(\ } }

public class Pclass { //public class public void method1(){ System.out.println(\ } protected void method2(){ System.out.println(\ } void method3(){ System.out.println(\ } private void method4(){ System.out.println(\ } }

附录2 TestPackage.java

package com.yourname.ch3; public class TestPackage{

public static void main(String [] rgs){ } }

附录3 TestPackage.java

package com.yourname.other; public class TestPackage{

public static void main(String [] rgs){ }

23

实验三、对象和类(二)

1.实验目的

(1)结合面向对象思想掌握类的定义以及类中成员的定义,学会设计自己的类。

(2)掌握方法重载、尤其是构造方法的重载,深入理解构造函数的作用与调用时机。

(3)理解this关键字同static关键字的意义,掌握成员变量的具体隐藏实现。

(4)理解对象同对象引用间的区别,掌握创建对象与调用对象成员的方法,以及对象作为参数与基本数据类型变量做参数的区别。

2.实验内容和步骤

上机输入程序并调试运行程序。

(1)定义一个圆柱体类Cylinder,至少具有私有成员变量: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)在上一节实验中,曾经定义过一个圆面积类Circle,请在它的基础之上,重写编写(1)中的圆柱体类Cylinder。

提示,可以利用Circle类的对象表示圆柱体的底,思考这两个

24

类之间应该是继承还是组合关系。

(3)定义一个学生类Student,要求其包含name(String类型,保存姓名)、birthday(上一节定义过的MyDate类型,用以保存生日)以及成员方法set、get等、print(打印对象信息)。在main方法,要求方法中通过“Student s1=new Student(); ”新建姓名为\、生日为1999年1月1日的对象,再通过类似“Student s2=new Student(\张三\”的方法新建与你自己信息相同的学生对象,分别打印s1同s2的信息;添加新的构造函数,以便能够通过“Student s3=new Student(\张三\MyDate()); Student s4=new Student(\张三\”语句创建的两个新对象,并分别打印其信息;

(4)在Cylinder和Student的默认构造方法中应用this方法,使之自身不包含初始化语句,而是通过自定义构造函数初始化成员变量。

(5)根据个人能力选择实现《数据结构》一课中学过的栈Mystack或单链表MyLinkList。(此题不写在实验报告中)

3.预习和复习内容 教材第4章。

25

实验四、继承与多态(一)

1.实验目的

(1)结合面向对象思想,熟练掌握子类的定义以及子类构造方法的定义,理解子类构造函数调用顺序。

(2)掌握父类方法的重写、深入理解子类中对父类成员的访问权限。

(3)理解Object的意义,掌握自定义类的toString()、equals()方法的实现。

(4)理解向上转型和向下转型,以及多态的目的和意义,掌握多态的常用形式。

2.实验内容和步骤

(3)在上一次实验中,曾经定义过圆面积类Circle、日期类MyDate,请重写它们toString和equals方法。在main方法中新建c1、c2两个默认Circle对象,d1、d2两个默认MyDate对象,分别通过equals方法比较;通过set方法修改c2和d2的成员变量值后,再分别通过equals方法比较;

注意,应比较重写toString方法前后,System.out.println(c1);System.out.println(d1)的结果。

(4)已知Employee类的定义(附录1),为其编写一个子类TempEmployee,其基本工资为500,计算工资办法为:工资=基本工资+奖金;如需要可以修改Employee类属性的访问修饰符。

(5)调试TestM.java(附录3 ),掌握向上转型与向下转型;

26

(6)分析TestM.java(附录2 ),Swan重写了父类的若干方法,其中哪些重写不成功,为什么?

3.预习和复习内容 教材第5章。

27

附录1 Employee.java

public class Employee{ private String name; private String department; private double basicpay; private double pay; Employee(){ this(\ } Employee(String n, String d, double bp){ name=n; department=d; basicpay=bp; } public double getPay(){ pay=basicpay; return pay; } public String toString(){ return \ } }

附录2 TestM.java

class Bird { String name; Bird(String n) { name = n; }

final public void fly() {

System.out.println(name + \ }

public void fly(int number) {

System.out.println(name + \ }

protected void shout() {

System.out.println(name + \ }

private void shout(int number) {

System.out.println(name + \ }

28

}

class Swan

extends Bird { Swan(String n) { super(n); }

public void fly() {

System.out.println(name + \ }

private void fly(int number) {

System.out.println(name + \ }

protected void shout() {

System.out.println(name + \ }

private void swim() {

System.out.println(name + \ } }

public class TestM {

public static void main(String[] args) { Bird b1 = new Bird(\小小鸟\ Swan b2 = new Swan(\小天鹅\ b2.fly(); b2.swim(); } }

附录3 TestM.java

class Bird { String name; Bird(String n) { name = n; }

public void fly() {

System.out.println(name+\ }

public void shout() {

System.out.println(name+\ }

public void shout(int number) {

29

System.out.println(name+\ } }

class Swan extends Bird { Swan(String n) { super(n); }

public void fly() {

System.out.println(name+\ }

public void shout() {

System.out.println(name+\ }

public void swim() {

System.out.println(name+\ } }

class Duck extends Bird { Duck(String n) { super(n); }

public void fly() {

System.out.println(name+\ }

public void shout() {

System.out.println(name+\ }

public void swim() {

System.out.println(name+\ } }

public class TestM {

public static void main(String[] args) { Bird b1 = new Bird(\小小鸟\ Bird b2 = new Swan(\小天鹅\ Bird b3 = new Duck(\唐老鸭\

/*分析以下语句编译错误的原因*/ //b1.swin(); //b2.swin();

30

//b3.swin();

//(Duck)b3.swim();

/****************************/

/*先分析以下语句的运行结果,再执行验证*/ b1.fly(); b2.fly(); b3.fly();

b1.shout(1); b2.shout(2); b3.shout(3);

Swan s2=(Swan)b2; s2.swim();

s2=(Swan)b1; s2.swim();

s2=(Swan)b3; s2.swim();

((Duck)b3).swim();

/****************************/ } }

31

实验四、继承与多态(二)

1.实验目的

(1)结合面向对象思想,熟练掌握子类的定义以及子类构造方法的定义,理解子类构造函数调用顺序。

(2)掌握父类方法的重写、深入理解子类中对父类成员的访问权限。

(3)理解Object的意义,掌握自定义类的toString()、equals()方法的实现。

(4)理解向上转型和向下转型,以及多态的目的和意义,掌握多态的常用形式。

2.实验内容和步骤

(1)设计一个形状类Shape,包含一个getArea()方法,该方法不包含实际语句。

(2)在Shape类基础上设计圆形、矩形、三角形和梯形四个子类,要求根据实际形状重写getArea()方法。

(3)设计一个TestShape类,包含变量area(存储总面积)、静态方法countArea(Shape s),该方法负责把参数中的形状面积加入到area中。在main函数中新建(2)中四种类型的对象s1、s2、s3、s4,通过调用countArea方法把四个对象面积累加到area中,最后输出area。

(4)选做。设计在数据结构中学过的单链表类MyLinkList,该类包含头结点,以及插入节点、删除节点、打印单链表等函数。

32

提示,首先编写节点类MyNode,该类包含int型变量date(存储数据)和MyNode型对象next(存储下一个节点)。MyLinkList类中包含MyNode类对象headnode。

3.预习和复习内容 教材第5章

33

实验五、抽象类、接口

1.实验目的

(1)理解抽象类的意义和实际应用的一般模式,熟练掌握抽象类和抽象方法的定义以及抽象类的继承,尤其是子类是非抽象类的情况。

(2)理解接口的意义、实际应用的一般模式及与抽象类的区别,熟练掌握接的定义以及接口的继承和实现。

2.实验内容和步骤

(1)将实验四中形状类Shape的getArea()改为抽象方法,在不修改四种形状子类和测试类TestShape的基础上,保证执行TestShape能够得到与实验四同样的结果。

(2)将实验四中形状类Shape改为接口,在不修改测试类TestShape的基础上,保证执行TestShape能够得到与实验四同样的结果。

(3)将附件1添加到工程,调试后保证源程序能编译成功,画出附件1中多个类间的关系图,按以下步骤调试程序。注,以下5步没有先后关系。

① 将AbsClass类前面abstract删掉,编译会出现什么结果,为什么?

② 将AbsClass类中的abstract void absMethod();改为abstract void absMethod(){},编译会出现什么结果,为什么?

③ 删除AbsClass类中的absMethod()方法,AbsClass类可否通

34

过编译?

④ 将AbsSubClass类前面abstract删掉,编译会出现什么结果,为什么?

⑤ 将SubClass中的absMethod方法改名为absMethod2,编译会出现什么结果,为什么?

(4)在TestAbsctract的main方法中添加“

SubClass sc=new SubClass(); AbsClass ac=new AbsClass();

”,编译会出现什么结果,为什么? (5)在TestAbsctract的main方法中添加“

SubClass sc=new SubClass(); AbsClass ac;

”,编译会出现什么结果,为什么? (6)在TestAbsctract的main方法中添加“

SubClass sc=new SubClass(); AbsClass ac=new SubClass(); AbsClass ac2=sc; sc.absMethod(); ac.absMethod(); ac2.absMethod();

”,可否通过编译,为什么? 3.预习和复习内容 教材第6章

35

附录1 TestAbsctract.java

abstract class AbsClass{ abstract void absMethod(); void commMethod(){ System.out.println(\ } }

abstract class AbsSubClass extends AbsClass{ void commMethod3(){ System.out.println(\ } }

class SubClass extends AbsClass{ void absMethod(){ System.out.println(\ } }

public class TestAbsctract { public static void main(String [] rgs){ } }

36

实验六、异常

1. 实验目的

(1)理解Java异常处理机制,理解为什么程序设计中需要异常、没有异常之前程序的遇到异常的结果。

(2)掌握Exception的分类,能够分辨哪些异常属于运行时异常,哪些异常属于已检查异常。

(3)掌握异常处理结构try、catch、finally,理解异常出现时和不出现时程序的执行流程。

(4)学会使用throw抛出异常,掌握何时选择处理异常何时选择抛出异常。

(5)学会使用throws声明为可能抛出异常的方法,掌握哪些方法必须声明可能抛出的异常。 2. 实验内容和步骤

(1)比较附录1、附录2、附录3中的程序有何异常,分析运行的结果有何不同,再编译运行它们验证你的想法。

(2)将附录5中main函数后面的“throws Exception”去掉再编译会怎么样,为什么?

(3)在实验三中曾经实现过日期类MyDate,它包含一个含参数的构造方法MyDate(int year, int month, int day)、以及三个相应的设置方法setXXX(int arg)。

① 现编写一个自定义的异常InvalidDateException。当构造方法或设置方法接受的参数不符合实际要求时,抛出一个这个异常的实

37

本文来源:https://www.bwwdw.com/article/not7.html

Top