《面向对象程序设计》实验指导书

更新时间:2024-05-30 20:41:01 阅读量: 综合文库 文档下载

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

《面向对象程序设计》

实验指导书

郭玉柱

广东商学院信息学院 二0一0 年 十二 月

目 录

实验一 Java基础实验

实验二 Java实验三 实验四 Java实验五 Java 实验六 实验七 实验八 Java Applet

附录1 面向对象特性试验--Java中的类、对象和方法 类的继承、多态、接口、访问控制符与修饰符 资源及其利用 语言的异常处理 输入输出流 图形用户界面设计 及多线程试验

实验报告格式

实验一 Java基础实验

一、实验目的与要求

1. 学习编写简单的Java程序。

2. 学习掌握Java基本数据类型及其基本运算。 3. 学习掌握Java 的基本流程控制语句。

二、相关知识

1. 了解JDK的工作环境,以及如何使用JDK进行编程。 2. 熟悉集成软件 eclipse3.5及其使用。

二、实验内容

1. 编写Hello.java程序并运行。

2. 用Java语言编写一个应用程序在屏幕上输出1000之内的素数。 3. 一个数如果恰好等于它的因子之和,这个数就称为“完数”,比如28=1+2+4+7+14。编写一个应用程序在屏幕上输出1000之内的完数。 4. 求满足1!+2!+3!+ …+n!≤9999的最大整数n 。

5. 一个三位的整数如果它的各位数字的立方之和等于这个三位数,就称此数为水仙花

数,比如 371?33?73?13,编写一个应用程序在屏幕上输出所有水仙花数。 6. 下面程序的输出结果是什么?

实验二 Java面向对象特性试验-Java中的类、对象和方法 一、实验目的与要求

1. 掌握类的定义和使用。

2. 掌握对象的声明、创建和使用。 3. 掌握构造方法的定义和使用。

4. 掌握类方法(静态方法)和非类方法(非静态方法)的区别和使用。 5. 掌握成员变量和局部变量的区别和使用。

二、实验内容

1. 编写一个Java程序,定义一个表示学生的类,类名Student,

其成员变量有:学号、班级姓名、性别、年龄; 成员方法:(1)获得班号(2)获得姓名(3)获得年龄(4)修改年龄; 创建一个Student的对象,修改该对象的年龄,并输出该对象的年龄。 在Student.Java文件

2.为Student类定义构造方法,用于初始化所有成员变量,增加一个方法toString(),它的返回值是String,其功能是把一个Student类的对象的成员变量信息组合成一个字符串 并输出。 3. 简述构造函数的作用和特点。下面是某同学为Student类编写的一个构造函数,请指出那些地方有错误: void Student(int sno, String sname){ studentNo=sno;

studentName=sname;

return sno; }

4. 编写一个日期类Date,要求:

(1) 日期类 Date的成员变量有:year, month,day 都是int 型。 (2)日期类的方法有:

构造方法 Date(),日期的默认值为2008年1月1日;

构造方法 Date(int y,int m,int d),形参y,m,d分别为某个日期的年月日的初始值; 成员方法 int getYear():获取日期的年数作为方法的返回值;

成员方法 int getMonth():获取日期的月份作为方法的返回值; 成员方法 int getYear():获取日期的日作为方法的返回值;

成员方法 void showDate():已“****年**月**日”的形式显示一个日期。 5.下面四个程序分别有什么错误?

} public class ShowErrors{ public static void main(String arg[ ]){ ShowErrors t=new ShowErrors(5); } public class ShowErrors{ public static void main(String arg[ ]){ ShowErrors t=new ShowErrors(); t.x(); } } (1)

(2)

public class ShowErrors{ public void method1(){ Circle c; System.out.println(“What is radius”+c.getRadius()); c=new Circle; } } (3)

public class ShowErrors{ public static void main(String arg[ ]){ C c=new C(5.0); system.out.println(c.value); } } class C{ int value=2; }

(4) 6. 下列代码有什么错误?

7. 下列程序的输出是什么?

8. 假设Foo类如下图(1)中定义,f是Foo的一个对象。图(2) 中的哪些语句是正确的? public class Foo{ int i; } static String s; void imethod(){ } static void smethod(){ } System.out.println(f.i); System.out.println(f.s); f.imethod(); f.smethod(); System.out.println(Foo.i); System.out.println(Foo.s); Foo.imethod(); Foo.smethod();

9. 如果合适的话,在“(1) ?”处加入static关键字。

(2)

10. 是否能在静态方法中调用成员方法或引用成员变量?是否能在成员方法中调用静态方法或引用静态变量?下面代码的错误是什么?

11. 描述传递基本类型参数和传递引用类型参数的区别。写出下面程序的输出:

12. 写出下列程序的输出:

13. 写出下列四个程序各自的输出:

14. 下列程序的输出是什么?

15. 描述关键字this的作用,下列代码有什么错误? public class C{ int p;

public void setP(int p){ p=p; }

16. 编写名为Rectangle的类表示矩形,这个类包括:

·一个double类型的数据域width和height表示矩形的宽和高,它们的默认值都为1; ·String类型的数据域color表示矩形的颜色,进一步假设所有矩形的颜色都是相同的,默认颜色为白色;

·无参构造方法创建默认矩形;

·一个构造方法创建指定width和height的矩形; ·所有三个数据域的访问器方法和修改器方法; ·getArea()方法返回该矩形的面积;

·getPerimeter()方法返回它的周长;

编写一个测试程序,创建两个Rectangle对象,设置第一个对象的宽为4,高为40,第二个对象的宽为3.5,高为35.9,所有Rectangle对象的颜色为红色。显示两个对象的属性并求它们的面积和周长。

17. 设计一个名为Fan的类模拟风扇。这个类包括:

·三个常量SLOW,MEDIUM好FAST,其值分别为1,2,3,表示风扇的速度; ·int类型的数据域speed表示风扇的速度(默认值为SLOW); ·boolean型的数据域on表示风扇是否打开(默认值为false); ·double型的数据域radlus表示风扇的半径(默认值为5); ·string型的数据域color表示风扇的颜色(默认值为blue); ·无参构造方法创建默认风扇;

·全部四个数据域的访问器和修改器;

·toString()方法返回描述风扇的字符串。如果风扇打开,该方法用一个组合的字符串返回风扇的速度、颜色和半径;否则,用一个组合的字符串和“fan is off”一起返回风扇的颜

色和半径。

编写一个测试程序,创建两个Fan对象,将第一个对象设置为最大速度,半径为10,颜色为 yellow,打开状态;第二个对象为中等速度,半径为5,颜色为blue,关闭状态。通过调用toString方法显示该两对象。

18. 设计一个名为Account的类模拟账户,它包括: ·int型数据域id表示账号(默认值为0);

·double型数据域balance表示账户余额(默认值为0);

·double型数据域annualInterestRate存储当前年利率(默认值为0); ·Date型数据域dateCreated存储账户开户的日期; ·无参构造方法创建一个默认的账户;

·id,balance和annualInterstRate的访问器和修改器; ·dateCreated的访问器;

·getMonthlyInterestRate()方法返回月利率; ·withDraw方法从账户提取特定数额的款;

·deposit方法向账户存特定数额的款;

编写一个测试程序,创建一个账号为1122、余额为20 000、年利率为4.5%的Account对象。使用withDraw方法提款2500元,使用deposit方法存款3000元,并打印余额和月利率,以及该账户的开户日期。

19. 设计名为Stock的类模拟股票,该类包括: ·string型数据域symbol表示股票代号; ·string型数据域name表示股票的名称;

·double型数据域preViousclosingPrice存储前一天的股票价格; ·double型数据域currentPrice存储当前时间的股票价格; ·一个构造方法根据指定的股票代号和名称创建股票; ·所有数据域的访问器方法;

·previousClosingPrice和currentPrice的修改器方法;

·changePercent()方法返回从previousClosingPrice变为currentPrice的百分比; 编写测试程序创建Stock对象,其股票代号为SUNW、名称为Sun Microsystem Inc.、上期收盘价为100。设置新的当前价为90,显示价格变化百分比。 20. 编写程序,输入年份,打印出该年的年历(12个月的),如下图所示。 提示:使用Calendar类得到一个Calendar类对象,先求出输入年份的1月1日是星期几, 然后通过循环打印出每个月的日历,注意大小月和闰月问题。

21. 设计名为Time的类。该类包含:

·数据域hour、minute和second表示时间;

·无参构造方法为当前时间创建Time对象; (数据域的值表示当前的时间)

·一个构造方法在指定以毫秒表示的、从1970年1月1日午夜开始已逝去的时间时,

创建一个Time对象;(数据域的值表示该时间)

·三个 get方法分别获得数据域hou r,minute和second;

编写测试程序创建两个Time对象(使用new Time()和newTime(555550000)),并显示它们的小时、分钟和秒。

提示:无参构造方法可以使用当前时间,当前时间可以通过System. currentTimeMillis()获得。另外一个构造方法为指定逝去的时间设置小时、分钟和秒的值。例如,如果逝去的时间555550000毫秒,那么小时为10,分钟为19,秒为10 。 22. 设计名为MyInteger的类,它包括:

·int型数据域value存储该对象表示的int值;

·一个构造方法,当指定int值时,创建MyInteger对象;

·一个get方法返回int的值;

·isEven(),isOdd()和isPrime()方法,如果这个值分别为偶、奇或素数,返回true; ·静态方法isEven(int),isOdd(int)和isPrime(int),如果指定的值分别为偶、奇或素数, 返回true;

·静态方法 isEven(MyInteger),isOdd(MyInteger)和isPrime(MyInteger),如果指定的值 分别为偶、奇或素数,返回true。

·equals(int)和equals(MyInteger)方法,如果该对象的值与指定的值相等,返回true; ·静态方法parseInt(int)将字符串转变成int值。

编写用户程序测试该类中的所有方法。

23. 设计名为MyPoint的类表示一个具有x坐标和y坐标的点,该类包括: ·两个数据域x和y表示坐标; ·无参构造方法创建点(0,0);

·一个构造方法根据指定坐标创建一个点;

·两个get方法分别得到数据域x和y;

·distance方法返回MyPoint类型的两个点之间的距离;

·distance方法返回从这一点到另一个指定x和y坐标的点之间的距离; 编写测试程序创建两个点(0,0)和(10,30.5),并显示它们之间的距离。

24. 请写出下列程序的输出结果 //程序名TestAB.java

25. 请写出下列程序的输出结果

///程序名TestAB2.java

26. 设计名为Course的类,它包括:

·1个构造方法,用于初始化课程编号、课程名和学分 ·1个方法:printCourseInfo(),用于输出课程相关的信息

·3个成员变量:课程编号(cNnumber)、课程名(Cname)、学分数(Cuit)

编写课程类的测试程序

27.下面程序定义了一个Student类及其测试程序,请给出程序运行的结果

//TestStudent.java

实验三 类的继承、多态、接口、访问控制符与修饰符 一、实验目的与要求

1. 掌握继承和多态这两个面向对象程序的基本原则。 2. 理解interface关键字和接口的基本概念。

3. 理解abstract关键字,掌握抽象类和程序方法的设计技巧。

4. 理解 final关键字,掌握最终类和抽象类的区别和使用。

5. 理解static关键字,理解类的层次和对象层次的区别,掌握类变量和类方法的使用。6. 理解包的概念和使用。创建一个名为charpter3_2的包,将本实验的程序放入该包中。

二、实验内容

1. 设计一个Person 类,其成员变量有:姓名(name)、性别(gender)、年龄(age);再设计一个Student类,它是类Person的子类,其成员变量有:学号(id)、班名(cname)、成绩(score),

类Student中要有一个方法 display(),用来显示一个学生的信息。编写一个测试程序,创建一个Student类的对象,要求name和id 是自己的姓名和学号,输出学生的各种信息,学生的基本信息在类Student的带参数的构造方法中设定。 2. 写出下列程序运行结果

3.下列程序在编译时会出现什么问题?

4. 下列说法对还是错?

(1)子类是父类的一个子集。

(2)当从子类调用构造方法时,它的父类的无参数构造方法也常常被调用。 (3)可以在子类覆盖定义在父类中额私有方法。 (4)可以在子类覆盖定义在父类中的静态方法。 5. 指出下列类中的问题。(提示,至少有两个问题)

6. 写出下列程序运行的结果:

7. 在下列代码中,类A和类B在不同的包中。如果问号的位置用空白代替,类B能正常编译吗?如果问号的位置用private代替,类B能正常编译吗?如果问号的位置用protected代替,类B能正常编译吗?

8. 写出执行Test.java结果。

9. 写出执行Test1.java、Test2.java结果。

(1)

(2)

10. 写出程序HidingDemo.java运行结果:

11. 判断下列说法的对错: ·终极类可以有实例。

·终极类可以扩展。

·终极方法可以被覆盖。

·总可以成功地将子类的实例转换为父类。

·总可以成功地将父类的实例转换为子类。

12. (Person、Student、Employee、Faculty和Staff类)设计名为Person的类和它的两个

子类Student和Employee。Employee有子类Faculty、Staff。人有姓名、地址、电话号码和电子邮件地址。学生有班级状态(一年级、二年级、三年级或四年级),将这些状态定义为常量。职员有办公室、工资和受聘日期。定义名为MyDate的类,包含数

据域year(年)、month(月)、day(日)。职员有办公时间和级别,职员有职务称号。 覆盖每个类中的toString方法显示相应的类名和人名。

编写测试程序,创建Person,Student,Employee,Faculty和Staff,并调用它们的toString()方法。

13. 定义一个类A,该类有一个方法f,方法f可以输出英文字母,再定义一个类B是A

的子类,子类B不能重写父类A的方法f,子类有一个方法g,可以输出中文字符串。 编写测试程序,创建B的对象,输出英文字母和中文字符串。

14. 定义一个类SA,该类有一个方法f():public int f(int 1,int b),该方法返回a和b的最大值。再定义该类的子类SB,要求子类重写父类的方法f,重写的方法将返回a和b的最小公倍数。

要求在重写的方法的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回。要求在测试程序中分别使用父类和子类创建对象,并分别调用方法f计算两个正整数的最大公约数和最小公倍数。

15. 定义一个坐标类Pointer,成员变量包括x和y;成员方法有: (1)构造方法

(2)setX、setY、getX、getY、display方法

(3)toString()、equals()

(4)类方法distance用来计算亮点之间的距离

编写测试程序,创建Pointer的两个对象并计算两个点坐标的中点。 16. 编写程序.定义类Vehlcles.属性包括size、color、seats,还有一个构造方法和一个

显示信息的方法。然后从此类中派生Car类,其中包括构造方法和显示信息的方法,

并编 写程序进行测试。

17. 编写个矩形类MyRectangle,其中包括方法getHeigth(获得矩形的长度)、getWidth方

法(获得矩形的宽度)、setHeigth方法(设置矩形的长度)、setWidth方法(设置矩形的宽 度)、getArea方法(求矩形的面积)和showlnfo方法(显示矩形的格式),从矩形类派生出

一个子类Mysquare代表正方形,并对gctArea()方法和showinfo()方法进行重写。并编 写程序进行测试。

18. 主板上的PCI插槽就是显示中的接口,可以把声卡、显卡、网卡都插在PCI插槽上,

而不用担心那个插槽是专门插哪个的。编写程序实现这个原理。 19. 定义一个抽象类Area、两个Area的子类RectArea和RoundArea,以及一个实现类

ImpleArea。要求如下 (1)抽象类Area类中只包含一个抽象方法double area()。

(2)子类RoundArea类通过覆盖父类中的抽象方法area()来求圆的面积,另一个子类

RectArea类通过覆盖父类中的抽象方法area()求长方形的面积。 (3)圆的半径和长方形的边分别定义为子类RoundArea类和RectArea类的域,都为

double娄型。 (4)ImpleArea类中创建对象,接收键盘输入,输入内容分别为圆的半径和长方形的边,

并求出圆和长方形的面积,在屏幕上显示。

20.编写一个Animal类,包含:

(1)属性:private String type。

(2)构造方法;用于初始化私有属性type。

(3)方法:public string toString(),用于返回动物类型的信息public void sound(),用于

输出动物的叫声信息。

21.编写一个Flyable接口,包含:

方法:double flySpeed(),用于返回最大的飞行速度。

22.编写Giede(老鹰)类和Pigeon(鸽子)类,分别继承题16中的Animal类并实现20题中的F1yable接口。编写测试程序,显示输出老鹰和鸽子的叫声信息和最大飞行速度。 23.编码实现一个打印机监视器,其中包括两个布尔型域“墨盒用尽”、“最后一次后打印

过10万张纸”和一个方法“需要维修”。该方法在两个布尔型域中有一个为返回真。 24.编码实现温度类,其中包括4个方法,其中getFahrenheit()和getCelsius()返回华氏和

摄氏温度值,setFahrenhei ()和setCelsius()分别设置华氏和摄氏温度值。

25.编码实现地址簿类。每个对象中包括“姓名”、“地址”、“电话”三个域,并为该类定

义相应的get,set方法。

实验四 Java资源及其使用

一、实验目的与要求

1. 理解Java标准库的结构。 3. 了解Java常用的包。

4. 掌握Object类的常用方法。

5. 掌握System类常用方法

6. 掌握Java的类库的一些基本类及使用,如System、Math、String和BufferString等。 7. 理解Java包装类的概念即使用。

二、实验内容

1. 设x,y是整型变量,d是双精度型变量,试书写表达式完成下面的操作:

(1) 求x的y次方。 (2) 求x和y的最小值。 (3) 求d取整后的结果。

(4) 求d四舍五入后的结果。 (5) 求atan(d)的数值。

2.写出下面程序运行结果,并解释之。

3.Math的random方法用来实现什么功能?语句(int)(Math.random()*6)+1的作用是什么?

(1)编程生成100个1~6之间的随机数,统计1~6每个数出现的概率; (2)修改程序生成1000个随机数并统计概率;比较不同的结果并给出结论。 4.编程求一个整数数组的最大值、最小值、平均值和数组所有元素的和。

5.编写程序,从键盘上输入一个字符串和一个指定字符,把字符串中所有与指定的字符相同的字符删除后输出。

6.编写程序,从键盘上输入一个字符串和一个指定字符,统计字符串中出现指定字符次数并输出。

7.编写程序,将字符串“Let us study Java”转化为大写、转化成小写、把字符串中的空

格用符号“#”替换,并分别输出。

实验五 Java语言的异常处理

一、实验目的与要求

1. 掌握Java的异常处理机制。

2. 掌握try、catch、throws和finally这5个关键字的用法。 3. 掌握成员的几个异常类。 4. 掌握自定义异常的使用。

二、实验内容

1.编写程序,从键盘上输入两个数。将第一个数除以第二个数并显示结果;处理所有可

能的异常。

2.写出下面程序运行的结果:

3.写出下列程序的输出结果。

4.有下列程序:

若用下面方式执行该程序,则baz的值为( )。

java Test Red Green Blue

(A)“” (B)null (C)\” (D)”BIue” (E)”Green” (F)代码不能编译 (G)程序抛出异常 5.有下列程序:

该程序的输出结果为( )。

(A)没有任何输出 (B)输出 “Finally” (C)编译错误 (D)抛出异常

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

Top