Java程序设计试验2学生版_第1页
Java程序设计试验2学生版_第2页
Java程序设计试验2学生版_第3页
Java程序设计试验2学生版_第4页
Java程序设计试验2学生版_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华北电力大学实验报告实验名称Java程序面向对象设计(一)课程名称Java程序设计专业班级:学生姓名:学 号:成 绩:指导教师:张学斌实验日期:、实验目的及要求1掌握类的定义。2掌握成员变量和成员方法的定义。3掌握构造方法的定义和使用。4掌握类的多态性二、实验环境Windows2000/Windows XP,JDK 1.21.6三、试验内容和步骤要求按照实验内容,写出详细实验过程和步骤,必要时截图。实验1机动车1.1实验要求编写一个Java应用程序,该程序有两个类:Vehicle (用于刻画机动车)和 User (主类)。具体要求如下:Vehicle类有一个double类型的变量speed用于

2、刻画机动车的速度,一个 int型变量power,用于 刻画机动车的功率。定义了 speedUp(i nt s)方法,体现机动车有加速功能。定义了 speedDow n()方法, 体现机动车有减速功能。定义了 setPower(int s),用于设置机动车的功率。定义了 getPower()方法,用 于获取机动车的功率。在主类User的mian()方法中用Vehicle类创建对象,并让该对象调用方法设置功率,演示加速和减速功能。1.2程序模板Vehicle.javapublic class Vehicle 【代码1】/声明double型变量speed刻画速度【代码2】/声明int型变量power

3、,刻画功率void speedUp(i nt s) 【代码3】将参数s的值与成员变量 speed的和赋值给成员变量 speed void speedDow n(i nt d) 【代码4】将成员变量speed与参数d的差赋值给成员变量 speedvoid setPower(i nt p) 【代码5】/将参数p的值赋值给成员变量power int getPower() 【代码6】返回成员变量 power的值double getSpeed() retur n speed;User.java public class User public static void main(String args)

4、Vehicle car1,car2;car1car2【代码7】使用new运算符和默认的构造方法创建对象【代码8】使用new运算符和默认的构造方法创建对象car1.setPower(128);car2.setPower(76);"+car1.getPower();"+car2.getPower();System.out.pri ntln ("car1 的功率是:System.out.println("car2 的功率是:car1调用speedUp方法将自己的car2调用speedUp方法将自己的目前的速度:目前的速度:【代码9】【代码10】System.o

5、ut.pri ntln ("car1System.out.pri ntl n("car2 car1.speedDow n(10); car2.speedDow n( 20);System.out.pri ntln ("car1System.out.pri ntl n("car21.3实验指导 创建一个对象时,成员变量被分配空间目前的速度: 目前的速度:speed的值增加80 speed的值增加80 "+car1.getSpeed(); "+car2.getSpeed();"+car1.getSpeed();"+ca

6、r2.getSpeed();这些内存空间称作该对象的实体或变量,而对象中存放着引用,以确保这些变量被该对象操作使用。空对象不能使用,即不能让一个空对象去调用方法产生行为。假如程序中使用了空对象,在运行时会产生异常:NullPointerException,对象时动态地分配实体的,Java的编译器对空对象不做检查。因此,在编译时要避免使用空对象。1.4实验改进(编写程序,并给出结果)1. 改进speedUp()方法,使得 Vehicle类的对象加速时不能将speed值超过200.2. 改进speedDown()方法,使得 Vehicle类的对象在减速时不能将speed值小于0.3. 增进一个刹车

7、方法 void brake(),Vehicle类的对象调用它能将 speed的值变成0.1.5实验结果实验2 家中的电视1. 实验要求编写一个Java应用程序,模拟家庭买一台电视,即家庭将电视作为自己的一个成员,即通过调 用一个方法将某个电视的引用传递给自己的电视成员。具体要求如下:有三个源文件,其中 TV.java中的TV类负责创建"电视”对象。 Family.java中的Family类 负责创建"家庭”对象, MainClass.java是主类。在主类的main()方法中首先使用 TV类创建一个对象 haierTV,然后使用Family类再创建一 个对象zhangsan

8、Family,并将先前 TV类的实例haierTV的引用传递给 zhangsanFamily对象 的成员变量homeTV。2. 程序模板TV .javapublic class TV int chann el;电视频道void setCha nn el( int m) if(m>=1)cha nn el=m;in t getCha nn el()retur n cha nn el;void showProgram() switch(cha nn el) case 1 : System.out.println(” 综合频道");break;case 2 : System.out.

9、println("经济频道");break;case 3 : System.out.println("文艺频道");break;case 4 : System.out.println("国际频道");break;case 5 : System.out.println("体育频道");break;default : System.out.println("不能收看"+channel+"频道");Family.java public class Family TV homeTV;

10、void buyTV(TV tv) 【代码1】将参数tv赋值给homeTV void remoteC on trol( int m) homeTV.setCha nn el(m);void seeTV() homeTV.showProgram(); /homeTV 调用 showProgram()方法Mai nClass.javapublic class Main Class public static void main(String args) TV haierTV = new TV();【代码2】/haierTV调用setChannel(int m),并向参数 m传递5 System.o

11、ut.println("haierTV 的频道是"+haierTV .getChannel(); Family zha ngSa nF amily = new Family。;【代码 3】/zhangSanFamily 调用 void buyTV(TV tv)方法,并将 haierTV System.out.println("zhangSanFamily 开始看电视节目");zha ngSa nF amily.seeTV();int m=2;System.out.println("hangSanFamily 将电视更换到"+m+&qu

12、ot;频道");zha ngSa nF amily.remoteC on trol(m);System.out.println("haierTV 的频道是"+haierTV .getChannel();System.out.println("hangSanFamily 再看电视节目”);zha ngSa nF amily.seeTV();3. 实验结果实验3共饮同井水1.实验要求编写程序模拟两个村庄共用一口水井。编写一个Village类,该类有一个静态的传递给参数TVint型成员变量 个村庄改变了waterAmount,用于模拟井水的水量。在主类Land

13、 的 main()方法中创建两个村庄,-waterAmount的值,另一个村庄查看waterAmount的值。2.程序模板/模拟水井的水量村庄的人数/村庄的名字Village.java public class Village static int waterAm ount; int peopleNumber; Stri ng n ame; Village(Stri ng s) n ame = s;static void setWaterAm oun t(i nt m) if(m>0)waterAm ount = m;void drin kWater(i nt n)if( waterAm

14、 ount-n>=0) waterAm ount = waterAm ount-n;System.out.println(name+"喝了 "+n+"升水"); elsewaterAm ount = 0;static int lookWaterAm oun t() return waterAm ount;void setPeopleNumber(i nt n) peopleNumber = n;int getPeopleNumber() retur n peopleNumber;Lan d.javapublic class Land public

15、static void main(String args) 【代码1】用类名调用setWaterAmount(int m),并向参数传值 200 int leftWater =【代码2】用Village类的类名访问 waterAmount System.out.println(” 水井中有"+leftWater+"升水");Village zhaoZhua ng,maJiaHeZhi; zhaoZhuang = new Village("赵庄"); maJiaHeZhi = new Village("马家河子"); zhao

16、Zhua ng.setPeopleNumber(80); maJiaHeZhi.setPeopleNumber(120);【代码3】/zhaoZhuang调用drinkWater(int n),并向参数传值 50 leftWater = 【代码 4 】/maJiaHeZhi 调用 lookWaterAmount()方法 Stri ng n ame=maJiaHeZhi. name;System.out.println(name+"发现水井中有"+leftWater+"升水");maJiaHeZhi.dri nkWater(100);leftWater =

17、 【代码 5 】/zhaoZhuang 调用 lookWaterAmount()方法n ame=zhaoZhua ng.n ame;System.out.println(name+"发现水井中有"+leftWater+"升水");int peopleNumber = zhaoZhua ng.getPeopleNumber(); System.out.println("赵庄的人口 :"+peopleNumber); peopleNumber = maJiaHeZhi.getPeopleNumber(); System.out.print

18、ln(” 马家河子的人口 :"+peopleNumber);3. 实验指导当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实 例变量就不会被分配内存。但是,类的类变量,在该类被加载到内存时,就分配了相应的内存变量。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有对象共享类变量。当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有当该类创建对象后,类中的实例方法才分配入口地址。当使用new运算符和构造方法创建对象时,首先分配成员变量给对象,同时实例方法必须分配入口地址,然后再执行构造方法中

19、的语句,完成必要的初始化。因而实例方法必须由对象调用执行。需要注意的是,当创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享。对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,即使该类没有创建对象,也可以直接通过类名调用类方法。4. 扩展练习(1) 【代码3】是否可以是 Village.drinkWater(50);,为什么?(2) 【代码4】是否可以是 Village.lookWaterAmount();,为什么?(3) Land类main()方法中倒数第2行代码是否可以更改为:peopleNumber

20、= Village.getPeopleNumber();为什么?5. 实验结果实验4求方程的根1. 实验要求按照实验要求使用package语句将方程属性即计算根的方法封装在一个有包名的类中,包名是tom.jiafei,类的名字是 SquareEquatio n。编写一个Sun Rise的主类,该主类使用import语句引入tom.jiafei 包中的 SquareEquation 类。2. 程序模板模板1c:/1000/tom/jiafei将模板1给出的源文件 SquareEquation.java编译后得到的字节码文件复制到 目录中。SquareEquation .javapackage t

21、om.jiafei;public class SquareEquati on double a,b,c;double root1,root2;boolea n boo;public SquareEquati on( double a,double b,double c) this.a=a;this.b=b;this.c=c;if(a!=O)boo=true;elseboo=false;public void getRoots() if(boo) System.out.println("是一元 2 次方程"); double disk=b*b-4*a*c;if(disk>

22、;=0) root 仁(-b+Math.sqrt(disk)/(2*a);root2=(-b-Math.sqrt(disk)/(2*a);System.out.printf("方程的根:%f,%fn",root1,root2);else System.out.printf("方程没有实根 n”);else System.out.println(” 不是一元 2 次方程");public void setCoefficie nt(double a,double b,double c) this.a=a;this.b=b;this.c=c;if(a!=0)b

23、oo=true;elseboo=false;模板21. 设置classpath。假设本地 JDK的安装目录是: D:jdk1.6。在命令行执行如下命令:set classpath = D:jdk1.6jrelibrt.jar;.;c:1000;或 右击"我的电脑”-属性-系统特性- 高级选项-环境变量,将classpath的值改为classpath = D:jdk1.6jrelibrt.jar;.;c:1000;2. 将模板2给出的Java源程序 SunRise.java保存到D:2000中。Sun Rise.java import tom.jiafei.*;public class

24、 Sun Rise public static void main(String args) SquareEquati on equati on=new SquareEquati on( 4,5,1);equati on. getRoots();equati on. setCoefficie nt(-3,4,5);equati on. getRoots();3实验指导如果使用import语句引入了整个包中的类,那么可能会增加编译时间。但绝不会影响程序 运行的性能。Java运行平台由所需要的 Java类库和虚拟机组成,这些类库被包含在一个jrelib中的压缩文件中,当程序执行时,Java运行平台

25、从类库中加载程序真正使用的类字节码到内 存。可以使用import语言引入自定义包中的类,但必须在classpath中指明包的位置。实验5实例成员和类成员1. 实验要求掌握实例成员和类成员的使用方法2. 程序模板Example.javaclass A【代码1】声明一个float型实例变量a【代码2】声明一个float型类变量b,即static变量bvoid setA(float a)【代码3】将参数a的值赋值给成员变量avoid setB(float b)【代码4】将参数b的值赋值给成员变量bfloat getA()return a;float getB()return b;void in pu

26、tA()System.out.pri ntl n( a);static void in putB()System.out.pri ntl n( b);public class Examplepublic static void main(String args)【代码5】/通过类名操作类变量b,并赋值100【代码6】通过类名调用方法inputB()A cat =new A();A dog=new A();【代码7】 /cat象调用方法setA(int a)将cat的成员a的值设置为200 【代码8】 /cat调用方法setB(int b)将cat的成员b的值设置为400 【代码9】 /dog象调用方法setA(int a)将dog的成员a的值设置为150 【代码10】/dog调用方法setB(int b)将dog的成员b的值设置为300【代码11】/cat调用in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论