Java程序设计实验指导书版本Word文件下载.docx
《Java程序设计实验指导书版本Word文件下载.docx》由会员分享,可在线阅读,更多相关《Java程序设计实验指导书版本Word文件下载.docx(29页珍藏版)》请在冰点文库上搜索。
1)硬件:
CPUP43.0GHZ256M内存,80G硬盘空间。
2)软件:
操作系统:
WindowsXP
开发工具:
MyEclipse8.5、Jsdk1.6.1_02软件开发包
三、实验项目名称和学时分配
序号
实验项目名称
学时
分配
实验
属性
类型
实验者类别
必开/选开
1
初步的面向对象的程序设计
2
专业类
设计性
本科生
必开
面向对象程序设计的继承、多态等特性的练习
3
异常类的定义及处理
4
文件的读/写操作
综合程序设计
四、实验课考核方式
1.实验报告:
每位同学必须独立书写实验报告,注意:
不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
实验报告的内容应包括以下几个部分:
1)按照实验内容和实验步骤要求完成实验任务后,若程序已通过实验指导教师验收,则只在报告中重点给出调试分析过程描述:
包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);
若程序未完全通过验收,则需再此基础上提交包含详细注释的源程序清单。
2)根据思考题要求,重点描述需求分析、概要设计和详细设计过程,并提交包含详细注释的源程序清单,最后详细描述程序调试分析过程。
2.考核方式
2.1实验课成绩根据学生的实验预习、实验纪律、实验动手能力、实验结果和实验报告等几个部分进行综合评定,并给出优、良、中、及格和不及格共五档成绩。
2.2实验课成绩占课程总成绩的30%。
五、实验指导书及主要参考书
[1]蔡翠平主编唐大仕编著,JAVA程序设计(修订本),北方交通大学出版社清华大学出版社,2007年.
[2]侯捷译,JAVA编程思想(第二版),机械工业出版社,2002.
[3]丁振凡,Java语言实用教程,北京邮电大学出版社,2005.
[4]丁振凡,Java语言实用教程实验指导,北京邮电大学出版社,北京,2006
目录
实验一初步的面向对象的程序设计练习1
实验二面向对象程序设计的继承、多态等特性的练习6
实验三异常类的定义及处理11
实验四流、文件及基于文本的应用17
实验五综合实验21
主要参考文献23
实验一初步的面向对象的程序设计练习
一、实验目的
1)掌握类和构造方法的定义。
2)掌握创建类实例的方法。
3)初步掌握面向对象的编程思想
二、实验内容
1)编写一个JavaApplication,利用JDK软件包中的工具在命令行方式下编译并运行这个程序,使之能够输出字符串信息“HelloWorld!
”。
(注:
其后的所有实验如无特别说明,均是在MyEclipse8.5环境下编译执行)
2)编写程序实现如下功能:
已知学生类有域变量(姓名、考号、综合成绩、体育成绩)和方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。
现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。
三、实验仪器、设备及材料
四、实验原理
1)类、域、方法
类体中包括域和方法,都是类的成员。
一个类可以定义多个域和方法。
(1)域也就是类的静态属性,也称为变量、成员变量等,格式为:
类型名域名;
在定义域变量前,还可以加修饰符。
(2)方法是类的动态属性。
Java的方法与其它语言中的函数类似。
由方法头和方法体组成:
修饰符1……返回类型方法名(形参列表)throws异常列表
{
方法体语句;
}
其中,形参列表格式为:
形参类型形参名1,形参类型形参名2
2)类和对象
(1)类(class):
抽象的集合概念。
类包括系统类库中已定义好的类和用户自定义的类
(2)对象(实例instance):
实际个体。
创建某个类的具体对象(类似变量声明),具体定义格式为:
类名对象变量=new类名([参数]);
(3)构造方法:
构造方法的名字与类名相同。
创建对象时自动调用,并对对象进行初始化操作。
注意:
构造方法前面没有返回类型定义,它没有返回值,也不是void。
[不能return];
JAVA每个类都至少有一个构造方法[系统默认无参数构造方法];
一旦定义了构造方法,系统不再提供默认构造方法。
(4)对象的使用:
要访问或调用一个对象的域或者方法,使用.操作符。
一般形式:
引用对象变量名.域/方法名;
如p.sayHello();
由于只能用对象变量来访问这个对象的域或方法,不通过引用变量就没有办法访问,体现了面向对象的“封装性”。
3)静态域和静态方法
(1)静态域
用static修饰的域属于类的静态域(静态量,类变量),不用static修饰的为实例变量(实例域)。
静态域的特点如下:
●它们是类的域,不属于任何一个类的具体对象实例。
它保存在类的内存区域的公共存储单元。
●对于该类的任何一个实例对象,静态域是一个公共的存储单元。
●任何一个类的对象访问它,取到的都是相同的值;
●任何一个类的对象修改它,那么也是在对同一个内存单元进行操作。
(2)静态方法
用static修饰的方法属于类的静态方法,又称为类方法。
不用static修饰的方法为实例方法。
类方法的本质是该方法属于整个类,而不是属于某个实例。
静态方法具有如下特点:
●static方法是属于整个类的,它在内存中的代码段将随着类的定义而进行分配和装载。
而非static的方法是属于某个对象的,在这个对象创建时,对象的方法在内存中有自己的代码段。
●static方法不能操纵属于某个对象的成员变量,只能处理属于类的成员变量,即只能处理static域和方法。
●类方法中不能访问实例变量,也不能使用this或super。
●调用类方法可以使用类名,也可以用具体对象名。
五、实验步骤
1)编写一个JavaApplication,利用JDK软件包中的工具编译并运行这个程序。
步骤
(1):
编写、编译Java源程序。
打开MyEclipse,新建一个java文件,键入如下程序代码:
publicclassHello
publicstaticvoidmain(Stringargs[])
{System.out.println("
Hello,World!
"
);
}
}
将文件命名为Hello.java,注意保存文件Hello.java到路径“e:
\自己学号\java\”下。
步骤
(2):
编译Java源程序
Java源程序编写后,要使用Java编译器(javac.exe)将Java源程序编译成字节码文件。
Java源程序都是扩展名为.java的文本文件。
编译时首先读入Java源程序,然后进行语法检查,如果出现问题就终止编译。
语法检查通过后,生成可执行程序代码即字节码,字节码文件名和源文件名相同,扩展名为.class。
打开命令提示符窗口(MS-DOS窗口)进入Java源程序所在路径e:
\自己学号\java\”。
键入编译器文件名和要编译的源程序文件名,具体如下:
Setpath=%path%;
c:
\programfiles\jdk1.6.0_02\bin;
javac-dclassHello.java
按回车键开始编译(注意:
文件名H要大写,否则运行会出问题)。
如果源程序没有错误,则屏幕上没有输出,键入“dir”按回车键后可在当前目录中看到生成了class子目录,在class子目录下有一个同名字的.class文件即“Hello.class”。
否则,将显示出错信息。
步骤(3):
运行Java程序
按如下命令回到e:
\自己学号\java\目录:
cd..
使用Java解释器(java.exe)可将编译后的字节码文件Hello.class解释为本地计算机代码。
在命令提示符窗口或MS-DOS窗口键入解释器文件名和要解释的字节码文件名:
java–classpathe:
\自己学号\java\classHello
按回车键即开始解释并可看到运行结果。
(注意:
这个程序可以直接在Eclipse集成编辑环境中完成)
定义类Stduent,并添加如下域变量:
Stringname;
Stringid;
floatcomScore;
floatscore;
在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(Stringname,Stringid,floatcomScore,floatscore){……}
floatgetcomScore(){……}
floatgetscore(){……}
voidprint(){……}
步骤(3)定义类School,并添加静态变量
staticfloatscoreLine;
添加静态方法
staticfloatgetScoreLine(){……}
staticvoidsetScoreLine(floatscore){……}
步骤(4)定义一个Application程序类Enroll并添加方法:
publicstaticvoidmain(Stringargs[]){……}
staticbooleanisEnroll(Students){……}
步骤(5)保存文件名为Enroll.java,然后编译、调试和运行程序。
六、实验报告要求
1)按照实验内容和实验步骤要求完成实验任务后,若程序已通过实验指导教师验收,则只在报告中重点给出调试分析过程描述:
2)根据思考题要求,重点描述需求分析、概要设计和详细设计过程,并提交包含详细注释的源程序清单,最后详细描述程序调试分析过程。
七、实验注意事项
1)每个同学必须按时参加实验,并且每次实验前提交程序代码初稿,否则不能进行实验。
2)实验中严禁随意拷贝其他同学的程序或给其他同学拷贝。
3)在实验过程中,爱惜实验器材,避免对实验器材造成不必要的损害。
如发生损坏照价赔偿。
4)在实验用机上使用移动存储设备之前,必须用杀毒软件进行检测,否则不能使用。
5)每位同学完成实验任务后,必须经过实验指导老师验收后方可离开。
实验二面向对象程序设计的继承、多态等特性的练习
1)掌握类的继承机制。
2)熟悉类中成员变量和方法的访问控制。
3)熟悉方法或构造方法多态性。
4)熟悉接口的定义方法。
1)编写程序实现如下功能:
已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。
定义一组学生对象,并初始化他们的基本信息,然后依次输出。
2)输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
MyEclipse8.5、Jsdk1.6.1_02软件开发包
1)类的继承
面向对象语言允许从一个已有的类[父类]定义新的类[子类],从而形成继承关系。
父类是所有子类的公共域和公共方法的集合,每个子类是父类的特殊化。
子类继承父类的状态和行为,同时也可以修改父类,并可以添加新的状态和行为。
(1)域的继承和添加
子类可以从父类那里继承所有的没有被private和static修饰的域。
那么子类就无需再重复定义。
还可以在子类中定义其独特的域变量:
(2)方法的继承、覆盖和添加
父类的非private方法也可以被子类自动继承。
同时子类也可以重新定义与父类同名的方法,实现对其的覆盖/重置(override/overlay)。
在覆盖父类方法时注意应保持完全相同的方法名、返回值和参数类型列表,即重写父类中的方法。
另外子类还可以重载父类的方法或添加新的方法。
2)访问修饰符
Java提供4种访问权限:
public、protected、private和默认。
描述
private
默认
protected
public
同一类中
√
同一包中对子类
×
同一包中对非子类
不同包中对子类
不同包中对非子类
3)抽象类和接口
(1)抽象类和抽象方法
一个方法如果没有定义方法体,则称该方法为抽象方法。
包含一个或多个抽象方法的类,称为抽象类。
定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。
Java语言中,用abstract关键字来修饰一个类时,这个类叫做抽象类,用abstract关键字来修饰一个方法时,这个方法叫做抽象方法。
抽象类的语法格式如下
abstractClass{…}//抽象类
抽象方法的语法格式如下
abstractreturnTypeabstractMethod([paramlist])//抽象方法
抽象类必须被继承,抽象方法必须被重写。
抽象方法只需声明,无需实现,抽象类不能被实例化。
若类中包含了抽象方法,则该类必须被定义为抽象类。
(2)接口
接口是抽象类的一种,只包含常量和方法的定义,而没有方法的实现,且其方法都是抽象方法。
它的用处体现在下面几个方面:
●通过接口指明多个类需要实现的方法。
●通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。
●通过接口了解对象的交互界面,而无需了解对象所对应的类。
接口的定义包括接口声明和接口体,接口声明的格式如下:
[public]interfaceinterfaceName[extendslistOfSuperInterface]{…}
其中,extends子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个基类。
4)多态的两种表现形式
(1)同一类中的方法多态(方法重载):
同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。
(2)子类对父类方法的重新定义(方法覆盖):
方法名、返回值和参数形态完全一样。
已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(构造方法、修改年龄、显示基本信息)和一个构造方法。
定义类Person,并添加以下公共域变量
publicStringname;
publiccharsex;
publicintage;
添加构造方法Person(Stringname,charsex,intage){……}
基于类Person派生类Student,并添加如下公共域变量和方法
publicStringclassno;
publicStringsno;
publicvoidupdateAge(intage){……}
voidtoString(){……}
Student(Stringname,charsex,intage,Stringsno,Stringname)
{super(name,sex,age);
…….
定义一个包含main方法的Application程序类TestStudentPerson,初
始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。
在编辑调试工具中输入课本例5-4TestVirtualInvoke.java程序,编译运行,观察程序的运行结果,并思考为什么产生这样的结果。
将Shape类定义为abstactclassShape{……},然后重新定义Shape抽象类的派生类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
将Shape定义为interfaceShape{……},然后基于Shape接口实现类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
八、思考题
编写一个完整的JavaApplication程序,包含Circle类、Cylinde类、Test类、具体要求如下:
⑴Circle类
①属性
Radius:
double型,表示圆的半径
②方法
doublefindArea():
返回圆的面积(半径若为r,则面积为πr2)
doublegetRadius():
返回圆的半径
⑵Cylinder类
继承Circle类,并有以下属性和方法:
length:
double型,表示圆柱体的高
Cylinder(doubler,doublel):
构造函数,给圆柱体的半径和高赋初值
doublefindVolume():
返回圆柱体的体积
toString():
返回圆柱体的半径、高、体积等信息
⑶Test类作为主类要完成测试功能
①生成Cylinder对象②输出对象的描述信息
importjava.io.*;
publicclassTest
{publicstaticvoidmain(Stringargs[]){}
classCircle//Circle类定义,请填写完整
{finalfloatPI=3.14159f;
doubleradius;
doublegetRadius(){returnradius;
Circle(doubler){}
doublefindArea(){}
classCylinderextendsCircle//Cylinder类定义
{doublelength;
Cylinder(doubler,doublel){}
doublefindVolume(){}
publicStringtoString(){}
实验三异常类的定义及处理
1)了解异常处理方法。
2)熟悉并掌握常见异常的捕获方法。
3)熟悉JDK中已经定义的若干异常类的层次结构