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

更新时间:2024-05-18 04:06:01 阅读量: 综合文库 文档下载

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

《面向对象程序设计》

实验指导书

郭玉柱

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

目 录

实验一 Java基础实验

实验二 Java面向对象特性试验--Java中的类、对象和方法 实验三 类的继承、多态、接口、访问控制符与修饰符 实验四 Java实验五 Java 实验六 实验七 实验八 Java Applet

附录1 资源及其利用 语言的异常处理 输入输出流 图形用户界面设计 及多线程试验

实验报告格式

实验一 Java基础实验

一、实验目的与要求

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

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

二、相关知识

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

二、实验内容

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

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

5. 一个三位的整数如果它的各位数字的立方之和等于这个三位数,就称此数为水仙花数,比如 371?3?7?1,编写一个应用程序在屏幕上输出所有水仙花数。 6. 下面程序的输出结果是什么?

333

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

1. 掌握类的定义和使用,定义一些简单类并使用之。 2. 掌握对象的声明、创建和使用。 3. 掌握构造方法的定义和使用。

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

二、实验内容

1. 编写一个Java程序,定义一个表示学生的类,类名Student, 其成员变量有:学号、班级、姓名、性别、年龄; 成员方法:(1)获得班号(2)获得姓名(3)获得年龄(4)修改年龄;

在测试类中创建一个Student的对象,修改该对象的年龄,并输出该对象的年龄。 2. 类StudentB拥有上题中的所有属性和方法,并且有构造方法,用于初始化所有成员变量,在Student中增加一个方法public toString(),它的返回值是String,其功能是把类StudentB的对象的成员变量信息组合成一个字符串并输出。比如输出信息 学号:123,班号:1班,姓名:李莉,性别:女,年龄:19 。

在测试类中创建一个StudentB的对象,输出该对象的信息。

3. 简述构造函数的作用和特点。下面是某同学为Student类编写的一个构造函数,请指出那些地方有错误:

void Student(int sno, String sname){ studentNo=sno;

studentName=sname;

return sno; }

其中 studentNo、studentName是类Student中定义的变量。 4. 编写一个日期类MyDate,要求:

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

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

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

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

成员方法 void showDate():按“yyyy年mm月dd日”格式显示一个日期。

在测试类中创建一个MyDate类的对象,显示该对象的年月日。 5. 设计名为Rectangle的类表示矩形,

成员变量:width和height表示矩形的宽和高,其数据类型为double,默认值是1.0; 成员变量:color表示矩形的颜色,其数据类型为String,默认颜色为白色; 构造方法:无参数的构造方法Rectangle(),其功能是创建默认的矩形; 构造方法:带三个参数的构造方法Rectangle(double width,double height,String color),其

功能是创建指定大小和颜色的矩形

成员方法:getWidth()、getHeight()、getColour()功能是获取矩形的相应信息; 成员方法:setWidth()、setHeight()、setColour()功能是修改矩形相应的信息 成员方法:getArea() 计算矩形的面积并返回其值; 成员方法:getPerimeter()计算矩形的周长并返回其值;

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

6. 设计名为MyInteger的类表示整数,它包括:

成员变量:value 其数据类型为int(用于存储整数的值);

构造方法:MyInteger(int x),其作用是创建指定int值的MyInteger对象; 成员方法:getInt(),其功能是返回MyInteger对象的值;

成员方法:isEven()、isOdd()和isPrime()方法,如果value的值分别为偶、奇或素数,

则相应方法的返回值是true,否则为false;

成员方法:equals(int x),如果对象的值与指定的值相等返回true,否则返回false; 成员方法:parseInt(String x)将数字字符串x转变成int值。 编写程序测试该类中的所有方法。

7. 设计名为MyPoint的类表示一个平面坐标点--具有x坐标和y坐标的点,该类包括, 成员变量:x、y;double型;

无参数的构造方法:MyPoint( ),创建坐标点0,0);

带参数的构造方法:MyPoint(double x,double y)创建一个坐标点(x,y); 成员方法:getX()、getY(),返回坐标点相应的值;

成员方法:distance( ),返回MyPoint类型的两个点之间的距离;

编写测试程序创建两个点 (2,3) 和 (10,30.5),并显示它们之间的距离。 8. 设计名为Course的类,它包括:

3个成员变量:课程编号(cNnumber)、课程名(Cname)、学分数(Cuit) 1个构造方法,用于初始化课程编号、课程名和学分 1个方法:printCourseInfo(),用于输出课程相关的信息 编写课程类的测试程序,输出对象课程的相关信息。

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

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

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

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

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

编写一个测试程序,创建一个账号为1122、余额为20 000、年利率为4.5%的Account

对象。使用withDraw方法提款2500元,使用deposit方法存款3000元,并打印余额和月利率,以及该账户的开户日期。

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

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

11. 下面四个程序分别有什么错误? public class ShowErrors{ public class ShowErrors{ public static void main(String arg[ ]){ public static void main(String arg[ ]){ ShowErrors t=new ShowErrors(); ShowErrors t=new ShowErrors(5); t.x(); } } } }

(1) (2) public class ShowErrors{ public class ShowErrors{ public void method1(){ public static void main(String arg[ ]){ Circle c; C c=new C(5.0); System.out.println(“What is radius”+c.getRadius()); system.out.println(c.value); c=new Circle; } } } } class C{ int value=2; (3) } 12. 下列代码有什么错误?

(4)

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

public class Foo{

private boolean x;

public static void main(String args[ ]){

Foo foo=new Foo();

System.out.println(foo.x);

}

}

14. 假设类Foo如下图(1)中定义,f是类Foo的一个对象。图(2) 中的哪些语句是正确的? System.out.println(f.i); public class Foo{ System.out.println(f.s); int i; f.imethod(); static String s; f.smethod(); void imethod(){ System.out.println(Foo.i); } System.out.println(Foo.s); static void smethod(){ } Foo.imethod(); } Foo.smethod(); (1) (2) 14. 如果合适的话,在“?”处加入static关键字。

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

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

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

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

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

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

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

///程序名TestAB2.java

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

//TestStudent.java

24*. 编写程序,输入年份,打印出该年的年历(12个月的),如下图所示。

提示:使用Calendar类得到一个Calendar类对象,先求出输入年份的1月1日是星期几,

然后通过循环打印出每个月的日历,注意大小月和闰月问题。

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

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)抛出异常

6.有下列程序:

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

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

7.修改下列程序的错误之处。

8.写出下列程序的运行结果。

9.编写一个程序,要求从键盘输入一个double型的圆的半径,计算并精出其面积。 测试当输入的数据不是double型数据(如字符串“abc”)会产生什么结果,怎样处理。 10.编写一个应用程序,在main()方法中使用try块抛出一个Exception类的对象,为Exception的构造方法提供一个字符串参数,在catch块内捕获该异常并打印出字符串参数。添加一个finally块并打印一条消息。

11.创建一个自定义的异常类,该类继承Exception类,为该类写一个构造方法,该构造方法带一个String类型的参数。写一个方法.令其打印出保存下来的String对泉。再编写一个类,在main()方法中使用try--catch结构创建一个MyException类的对象并抛出,在catch块中捕获该异常井打印出传递的String消息。

实验六 输入输出流

一、实验目的

1. 掌握Java语言中的输入输出流的基本概念。 2. 掌握Java语言中流的分类

3. 掌握常用的自截留和字符流类的使用。 4. 掌握RandomAccessFile类和File类的使用

二、实验内容

1.编写一个加密程序,对用户输入的字符串加密后输出。加密的方法是将每个字符映射成字母表中的对称字符。例如a对应z,b对应y,字符串“Java”加密后就成为“Qzfz”。 2.编写程序,将一个源文件的内容传输到一个目标文件中去。要求: (1)编写程序时,可以把它分成3个小的模块: ①指定要传送的文件路径; ②指定传送文件的目录路径; ③传送文件。

(2)本程序在运行时看不到运行的结果,若要看运行的结果,得打开资源管理器,打

开传送的文件和被传送的文件,看这两个文件是否相同。

3.编写程序,能够列出指定目录下的所有文件,包括子目录下的文件,并使用文件名过

滤器来过滤文件。要求:

(1)使用File类的list()方法返回该目录下所有文件的文件名,文件名不包含路径

信息。

(2)使用File类的listFiles()方法返回该目录下的所有文件的File对象。

(3)FilenameFilter是文件名过滤器接口类,所有自定义的文件名过滤器必须实现该

接口的accept()方法。

4.编写程序,能够在文件系统中创建文件和目录。要求: (1)所创建的文件和目录都是新的,且能生成临时文件。

(2)用File类的createNewFile()方法根据抽象路径创建一个新的空文档,当抽象

路径指定的文件存在时,创建失败。

(3)用File类的mkdir()方法根据抽象路径创建目录。

(4)用File类的createTempFile()方法创建临时文件,可以指定临时文件的文件名

前缀、后缀以及文件所在的目录,如果不指定目录,则存放在系统的临时文件夹下。

(5)以上方法在创建文件和目录时,必须保证目标文件不存在,而且父目录存在,

否则会创建失败。

5.编写一个读文件的程序,它能够读二进制文件、文本文件等。要求最少以两种读文件的方 式实现,如按字符读取、按字节读取、随机读取、按行读取等方法。

实验七 图形用户界面设计

一、实验目的

1. 掌握GUI编程的基本概念。

2. 掌握基于Swing和AWT的图形用户界面的编程原理。 3. 理解容器和组件的概念,初步掌握事件编程的基本技巧。 4. 掌握Swing包中的基本组件和基本事件类。 5. 掌握常用布局管理器的使用。

二、实验内容

1.编写一个能够转换华氏温度和摄氏温度的程序。在“摄氏温度”文本域输入一个值并点击华氏按钮(两个按钮—摄氏按钮、华氏按钮),在华氏文本域显示相应的华氏温度。反之,在“华氏文温度”文本域输入一个值,点击摄氏按钮,在摄氏文本域中显示相应的摄氏温度。

2.编写程序,使得当按下鼠标时显示鼠标的位置。

3.编写程序,界面上包括一个标签、一个文本框和一个按钮。当单击按钮时,程序把文本框中的内容复制到标签中。 4.编写满足下列要求的程序:

(1)创建1个框架并将其内容窗格布局管理器设置为BorderLayout。 (2)创建2个面板并把它们添加到框架。

(3)每个面板包含3个按钮,面板使用BorderLayout布局管理器。 (4)单击按钮时,在控制台显示信息指明按钮被单击。

5.编写一个应用程序,实现如下图所示的图形界面.要求单击关闭按钮能够关闭窗口并结束程序运行。

6.编写一个应用程序,实现如下图所示的图形界面,要求单击按钮将窗口的背景颜色设置为相应的颜色。设置颜色可以调用容器的setBackground(Color c)方法,参数Color可以使用java awt.Color类的常量,如Color.RED等。

7.编写一个应用程序,其外观是一个框架窗口,窗口中放置一个多行文本框,下方放置3个按钮,3个按钮名分别为“OK”、“Cancel”、“Exit”,鼠标单击前两个按钮,在文

本框中显示按钮上文字,单击“Exit”按钮,关闭并退出程序。

8.编写一个应用程序,实现如下图所示的图形界面。要求在文本框中输入有关信息,单击“OK”按钮,在下面的文本区域中显示信息,单击“Clear”按钮将所有数据清除,且要求单击关闭按钮可将窗口关闭。

9.编写一个如下图所示的简单计算器程序,能够做加减乘除四则运算,包括十个数字(0~9和小数点)按钮和(加、减、乘、除)按钮,以及等号和清空两个辅助按钮,还有一个显示输入输出文本框。

10.编写一个类似于Windows记事本的程序,要求功能与其越接近越好。

实验八 Java Applet及多线程试验

一、实验目的

1. 掌握Java Applet程序的基本结构和编写方法,掌握使用getParameter() 方法提取Applet的参数值的方法。

2. 掌握继承Thread类和使用Runnable接口实现多线程的方法。 3. 掌握Runnable接口在Applet程序中的使用。

4. 理解线程同步的含义,掌握synchronized同步方法与synchronized同步语法的用法,

学会使用Thread Group控制线程。

5. 理解线程的挂起与恢复的概念,掌握Wait()和 notify()方法的使用。

二、实验内容

1. 编写一个Java Applet,要求从HTML文件中传递三个整数,在小应用程序中以这三个

整数创建一个Color对象,并将小程序的背景设置为该颜色。 2. 编写一个Java Applet,在窗口中拖拽鼠标画一个圆或椭圆。

3. 排序程序。编写一个多线程程序,先产生一个随机整数(大于10),在产生n个随机

整数存放在数组中,然后创建两个线程并发地对所生成的随机整数分别进行排序。其中一个线程要求采用冒泡法排序,另一个线程要求采用快速排序法。最后比较这两个线程程序排序的结果,并输出先完成排序的线程。

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

Top