ava程序设计试验学生版.docx
《ava程序设计试验学生版.docx》由会员分享,可在线阅读,更多相关《ava程序设计试验学生版.docx(24页珍藏版)》请在冰豆网上搜索。
![ava程序设计试验学生版.docx](https://file1.bdocx.com/fileroot1/2022-11/27/02993b4b-dfbc-4228-a7f8-e30b3f32b91d/02993b4b-dfbc-4228-a7f8-e30b3f32b91d1.gif)
ava程序设计试验学生版
华北电力大学
实验报告
实验名称Java程序面向对象设计
(一)
课程名称Java程序设计
专业班级:
学生姓名:
学号:
成绩:
指导教师:
张学斌
实验日期:
一、实验目的及要求
1.掌握类的定义。
2.掌握成员变量和成员方法的定义。
3.掌握结构方法的定义和使用。
4.掌握类的多态性
二、实验环境
Windows2000/WindowsXP,
三、试验内容和步骤
要求依据实验内容,写出详尽实验过程和步骤,必需时截图。
实验1灵活车
1.1实验要求
编写一个
Java应用程序,该程序有两个类:
Vehicle
(用于刻画灵活车)和
User(主类)。
详细要求
以下:
Vehicle类有一个
灵活车的功率。
定义了
车有减速功能。
定义了
double种类的变量speed,用于刻画灵活车的速度,一个int型变量power,用于刻画
speedUp(ints)方法,表现灵活车有加快功能。
定义了speedDown()方法,表现灵活
setPower(ints),用于设置灵活车的功率。
定义了getPower()方法,用于获得灵活车
的功率。
在主类
User
的mian()方法顶用
Vehicle类创立对象,并让该对象调用方法设置功率,演示加快和减速
功能。
1.2程序模板
publicclassVehicle{
【代码
1】//申明
double
型变量
speed,刻画速度
【代码
2】//申明
int
型变量
power,刻画功率
voidspeedUp(ints){
【代码
3】
//将参数
s的值与成员变量
speed的和赋值给成员变量
speed
}
voidspeedDown(intd){
【代码
4】//将成员变量
speed与参数
d的差赋值给成员变量
speed
}
voidsetPower(intp){
【代码5】//将参数p的值赋值给成员变量power
}
intgetPower(){
【代码6】//返回成员变量power的值
}
doublegetSpeed(){
returnspeed;
}
}
----------------------------------------------------------------------------------------------
publicclassUser{
publicstaticvoidmain(Stringargs[]){
Vehiclecar1,car2;
【代码
【代码
7】//使用
8】//使用
newnew
运算符和默认的结构方法创立对象运算符和默认的结构方法创立对象
car1
car2
car1.setPower(128);
car2.setPower(76);
【代码
9】//car1
调用speedUp方法将自己的
speed的值增添
80
【代码
10】//car2
调用speedUp方法将自己的
speed的值增添
80
car1.speedDown(10);
car2.speedDown(20);
}
}
1.3实验指导
创立一个对象时,成员变量被分派空间,这些内存空间称作该对象的实体或变量,而对象中寄存着引用,以保证这些变量被该对象操作使用。
空对象不可以使用,即不可以让一个空对象去调用方法产生行为。
若是程序中使用了空对象,在运
行时会产生异样:
NullPointerException,对象时动向地分派实体的,Java的编译器对空对象不做检查。
所以,在编译时要防止使用空对象。
1.4实验改良(编写程序,并给出结果)
1.
改良speedUp()方法,使得Vehicle类的对象加快时不可以将
speed值超出200.
2.
改良speedDown()方法,使得Vehicle
类的对象在减速时不可以将
speed值小于0.
3.
增进一个刹车方法voidbrake(),Vehicle
类的对象调用它能将
speed的值变为0.
实验结果
实验2家中的电视
1.实验要求
编写一个Java应用程序,模拟家庭买一台电视,即家庭将电视作为自己的一个成员,即经过调用一个方法将某个电视的引用传达给自己的电视成员。
详细要求以下:
有三个源文件,此中
创立“家庭”对象,
TV.java中的TV类负责创立“电视”对象。
MainClass.java是主类。
中的
Family
类负责
在主类的main()方法中第一使用
象zhangsanFamily,并将先前
TV
TV类创立一个对象
类的实例haierTV
haierTV,而后使用Family类再创立一个对
的引用传达给zhangsanFamily对象的成员变
量homeTV。
2.程序模板
publicclassTV{
intchannel;//电视频道
voidsetChannel(intm){
if(m>=1){
channel=m;
}
}
intgetChannel(){
returnchannel;
}
voidshowProgram(){
switch(channel){
break;
break;
break;
break;
break;
}
}
}
----------------------------------------------------------------------------------------------
publicclassFamily{
TVhomeTV;
voidbuyTV(TVtv){
【代码
1】
//将参数
tv
赋值给
homeTV
}
voidremoteControl(intm){
homeTV.setChannel(m);
}
voidseeTV(){
homeTV.showProgram();
//homeTV
调用
showProgram()
方法
}
}
-----------------------------------------------------------------------------------------
publicclassMainClass{
publicstaticvoidmain(Stringargs[]){
TVhaierTV=newTV();
【代码2】//haierTV调用setChannel(intm),并向参数m传达
FamilyzhangSanFamily=newFamily();
【代码3】//zhangSanFamily调用voidbuyTV(TVtv)方法,并将
5
haierTV
传达给参数
TV
zhangSanFamily.seeTV();
intm=2;
zhangSanFamily.remoteControl(m);
zhangSanFamily.seeTV();
}
}
3.实验结果
实验
3
共饮同井水
1.实验要求
编写程序模拟两个乡村共用一口水井。
编写一个
Village
类,该类有一个静态的
int
型成员变量
waterAmount,
用于模拟井水的水量。
在主类
Land
的
main()方法中创立两个乡村,一个乡村改变了
waterAmount
的值,另一个乡村查察
waterAmount
的值。
2.程序模板
publicclassVillage{
staticintwaterAmount;
//模拟水井的水量
intpeopleNumber;
//乡村的人数
Stringname;
//乡村的名字
Village(Strings){
name=s;
}
staticvoidsetWaterAmount(intm){
if(m>0)
waterAmount=m;
}
voiddrinkWater(intn){
if(waterAmount-n>=0){
waterAmount=waterAmount-n;
}
else
waterAmount=0;
}
staticintlookWaterAmount(){
returnwaterAmount;
}
voidsetPeopleNumber(intn){
peopleNumber=n;
}
intgetPeopleNumber(){
returnpeopleNumber;
}
}
-----------------------------------------------------------------------------
publicclassLand{
publicstaticvoidmain(Stringargs[]){
【代码
1】
//用类名调用
setWaterAmount(intm),
并向参数传值
200
intleftWater=
【代码
2】
//用
Village
类的类名接见
waterAmount
VillagezhaoZhuang,maJiaHeZhi;
zhaoZhuang=newVillage("赵庄");
maJiaHeZhi=newVillage("马家河子");
zhaoZhuang.setPeopleNumber(80);
maJiaHeZhi.setPeopleNumber(120);
【代码3】//zhaoZhuang调用drinkWater(intn),并向参数传值
50
leftWater=【代码4】//maJiaHeZhi
调用lookWaterAmount()
方法
Stringname=maJiaHeZhi.name;
maJiaHeZhi.drinkWater(100);
leftWater=【代码5】//zhaoZhuang调用lookWaterAmount()
方法
name=zhaoZhuang.name;
intpeopleNumber=zhaoZhuang.getPeopleNumber();
peopleNumber=maJiaHeZhi.getPeopleNumber();
}
}
3.实验指导
当java程序履行时,类的字节码文件被加载到内存,假如该类没有创立对象,类的实例变量就不会被分派内存。
可是,类的类变量,在该类被加载到内存时,就分派了相应的内存变量。
假如该类创立对象,那么不一样对象的实例变量互不同样,即分派不一样的内存空间,而类变量不再从头分派内存,全部对象共享类变量。
当类的字节码文件被加载到内存时,类的实例方法不会被分派进口地点,只有当该类创立
对象后,类中的实例方法才分派进口地点。
当使用new运算符和结构方法创立对象时,第一分派成员变量给对象,同时实例方法一定分派进口地点,而后再履行结构方法中的语
句,达成必需的初始化。
因此实例方法一定由对象调用履行。
需要注意的是,当创立第一个对象时,类中的实例方法就分派了进口地点,当再创立对象时,不再分派进口地点,也就是说,方法的进口地点被全部的对象共享。
关于类中的类方法,在该类被加载到内存时,就分派了相应的进口地点,即便该类没有创立对象,也能够直接经过类名调用类方法。
4.扩展练习
(1)【代码3】能否能够是Village.drinkWater(50);,为何?
(2)【代码4】能否能够是Village.lookWaterAmount();,为何?
(3)Land类main()方法中倒数第2行代码能否能够改正为:
peopleNumber=Village.getPeopleNumber();为何?
5.实验结果
实验4求方程的根
1.实验要求
依据实验要求使用
tom.jiafei,类的名字是
package语句将方程属性即计算根的方法封装在一个有包名的类中,包名是
SquareEquation。
编写一个SunRise的主类,该主类使用import语句引入
包中的SquareEquation类。
2.程序模板
模板1
将模板1给出的源文件SquareEquation.java编译后获得的字节码文件复制到c:
/1000/tom/jiafei目录
中。
packagetom.jiafei;
publicclassSquareEquation{
doublea,b,c;
doubleroot1,root2;
booleanboo;
publicSquareEquation(doublea,doubleb,doublec){
this.a=a;
this.b=b;
this.c=c;
if(a!
=0)
boo=true;
else
boo=false;
}
publicvoidgetRoots(){
if(boo){
doubledisk=b*b-4*a*c;
if(disk>=0){
root1=(-b+Math.sqrt(disk))/(2*a);
root2=(-b-Math.sqrt(disk))/(2*a);
}
else{
}
}
else{
}
}
publicvoidsetCoefficient(doublea,doubleb,doublec){
this.a=a;
this.b=b;
this.c=c;
if(a!
=0)
boo=true;
else
boo=false;
}
}
模板2
1.设置classpath。
假定当地JDK的安装目录是:
D:
\jdk1.6。
在命令行履行以下命令:
setclasspath=D:
\jdk1.6\jre\lib\rt.jar;.;c:
\1000;
或右击“我的电脑”->属性->系统特征->高级选项->环境变量,将classpath的值改为classpath=D:
\jdk1.6\jre\lib\rt.jar;.;c:
\1000;
2.将模板2给出的Java源程序SunRise.java保留到D:
\2000中。
importtom.jiafei.*;
publicclassSunRise{
publicstaticvoidmain(Stringargs[]){
SquareEquationequation=newSquareEquation(4,5,1);
equation.getRoots();
equation.setCoefficient(-3,4,5);
equation.getRoots();
}
}
3
实验指导
假如使用import语句引入了整个包中的类,那么可能会增添编译时间。
但绝不会影响程序运转
的性能。
Java运转平台由所需要的Java类库和虚构机构成,这些类库被包含在一个jre\lib
压缩文件中,当程序履行时,Java运转平台从类库中加载程序真实使用的类字节码到内存。
能够使用import语言引入自定义包中的类,但一定在classpath中指明包的地点。
中的
实验5实例成员和类成员
1.实验要求
掌握实例成员和类成员的使用方法
2.程序模板
classA
{
【代码1】
【代码2】
voidsetA(floata)
{
//申明一个
//申明一个
floatfloat
型实例变量a
型类变量b,即static
变量
b
【代码
3】
//将参数
a的值赋值给成员变量
a
}
voidsetB(floatb)
{
【代码4】//将参数b的值赋值给成员变量b
}
floatgetA()
{
returna;
}
floatgetB()
{
returnb;
}
voidinputA()
{
}
staticvoidinputB()
{
}
}
publicclassExample
{
publicstaticvoidmain(Stringargs[])
{
【代码
5】
//经过类名操作类变量
b,并赋值100
【代码
6】
//经过类名调用方法
inputB()
Acat=newA();
Adog=newA();
【代码7】
//cat象调用方法setA(inta)将cat的成员a的值设置为200
【代码8】
//cat调用方法setB(intb)将cat的成员b的值设置为400
【代码9】
//dog象调用方法setA(inta)将dog的成员a的值设置为150
【代码10】
//dog调用方法setB(intb)将dog的成员b的值设置为300
【代码11】
//cat调用inputA()。
【代码12】
//cat调用inputB()。
【代码13】
//dog调用inputA()。
【代码14】
//dog调用inputB()。
}
}
实验6银行账户
1.实验要求
申明银行账户类,成员变量包含账号、储户姓名、开户时间、身份证号码、存款余额等信息,成员方法包含开户、存款、取款、查问(余额、明细)、销户等操作。
publicclassAccount{
privateStringacctNumber;
privateStringcustomerName;
privateStringacctOpenTime;
privateStringcustomerIdNum;
privatedoublebalance;
publicAccount(StringaccoutnNumber){
this.acctNumber=accoutnNumber;
}
publicAccountopenAccount(StringaccountNumber){
returnnewAccount(accountNumber);
}
publicvoidsave(doublemoney){
this.balance+=money;
}
publicvoidquery(){
//....
}
}
2.实验结果
五、本次上机领会
创立一个Rectangle类,增添两个属性width、height。
(1)在Rectangle中增添两个方法计算矩形的周长和面积。
(2)编程利用Rectangle输出一个矩形的周长和面积。
设计一个Array类,增添一个整型数组,增添结构方法对数组赋初值。
(1)为Array类增添数组乞降方法,增添返回乞降值的方法。
(2)编程利用Array计算数组的和值并输出。
(实验报告如打印,纸张用A4,左装订;页边距:
上下2.5cm,左2.9cm,
右;字体:
宋体小四号,1.25倍行距。
)