




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 华北电力大学实 验 报 告实验名称Java程序面向对象设计(一)课程名称Java程序设计专业班级: 学生:学 号: 成 绩:指导教师: 学斌 实验日期: 14 / 14一、实验目的与要求1.掌握类的定义。2.掌握成员变量和成员方法的定义。3.掌握构造方法的定义和使用。4.掌握类的多态性二、实验环境Windows2000/Windows XP,JDK 1.21.6 三、试验容和步骤要求按照实验容,写出详细实验过程和步骤,必要时截图。实验1 机动车 1.1实验要求编写一个Java应用程序,该程序有两个类:Vehicle(用于刻画机动车)和User(主类)。具体要求如下:Vehicle类有一个do
2、uble类型的变量speed,用于刻画机动车的速度,一个int型变量power,用于刻画机动车的功率。定义了speedUp(int s)方法,体现机动车有加速功能。定义了speedDown()方法,体现机动车有减速功能。定义了setPower(int s),用于设置机动车的功率。定义了getPower()方法,用于获取机动车的功率。在主类User的mian()方法中用Vehicle类创建对象,并让该对象调用方法设置功率,演示加速和减速功能。1.2程序模板 Vehicle.javapublic class Vehicle 代码1/声明double型变量speed,刻画速度 代码2/声明int型变
3、量power,刻画功率 void speedUp(int s) 代码3 /将参数s的值与成员变量speed的和赋值给成员变量speed void speedDown(int d) 代码4/将成员变量speed与参数d的差赋值给成员变量speed void setPower(int p) 代码5 /将参数p的值赋值给成员变量power int getPower() 代码6 /返回成员变量power的值 double getSpeed() return speed; -User.javapublic class User public static void main(String args) V
4、ehicle car1,car2; 代码7 /使用new 运算符和默认的构造方法创建对象car1 代码8 /使用new 运算符和默认的构造方法创建对象car2 car1.setPower(128); car2.setPower(76); System.out.println("car1的功率是:"+car1.getPower(); System.out.println("car2的功率是:"+car2.getPower(); 代码9 /car1调用speedUp方法将自己的speed的值增加80 代码10 /car2调用speedUp方法将自己的spee
5、d的值增加80 System.out.println("car1目前的速度:"+car1.getSpeed(); System.out.println("car2目前的速度:"+car2.getSpeed(); car1.speedDown(10); car2.speedDown(20); System.out.println("car1目前的速度:"+car1.getSpeed(); System.out.println("car2目前的速度:"+car2.getSpeed(); 1.3 实验指导l 创建一个对象
6、时,成员变量被分配空间,这些存空间称作该对象的实体或变量,而对象中存放着引用,以确保这些变量被该对象操作使用。l 空对象不能使用,即不能让一个空对象去调用方法产生行为。假如程序中使用了空对象,在运行时会产生异常:NullPointerException,对象时动态地分配实体的,Java的编译器对空对象不做检查。因此,在编译时要避免使用空对象。1.4实验改进(编写程序,并给出结果)1. 改进speedUp()方法,使得Vehicle类的对象加速时不能将speed值超过200.2. 改进speedDown()方法,使得Vehicle类的对象在减速时不能将speed值小于0.3. 增进一个刹车方法v
7、oid brake(),Vehicle类的对象调用它能将speed的值变成0.1.5 实验结果实验2 家中的电视1.实验要求 编写一个Java应用程序,模拟家庭买一台电视,即家庭将电视作为自己的一个成员,即通过调用一个方法将某个电视的引用传递给自己的电视成员。具体要求如下:l 有三个源文件,其中TV.java中的TV类负责创建“电视”对象。Family.java中的Family类负责创建“家庭”对象,MainClass.java是主类。l 在主类的main()方法中首先使用TV类创建一个对象haierTV ,然后使用Family类再创建一个对象zhangsanFamily,并将先前TV类的实例
8、haierTV的引用传递给zhangsanFamily对象的成员变量homeTV。2.程序模板TV.javapublic class TV int channel; /电视频道 void setChannel(int m) if(m>=1) channel=m; int getChannel() return channel; void showProgram() switch(channel) case 1 : System.out.println("综合频道"); break; case 2 : System.out.println("经济频道"
9、;); 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.javapublic class Family TV homeTV;void buyTV(TV
10、tv) 代码1 /将参数tv赋值给homeTV void remoteControl(int m) homeTV.setChannel(m); void seeTV() homeTV.showProgram(); /homeTV调用showProgram()方法 -MainClass.javapublic class MainClass public static void main(String args) TV haierTV = new TV(); 代码2 /haierTV调用setChannel(int m),并向参数m传递5 System.out.println("haie
11、rTV的频道是"+haierTV.getChannel(); Family zhangSanFamily = new Family(); 代码3/zhangSanFamily调用void buyTV(TV tv)方法,并将haierTV传递给参数TV System.out.println("zhangSanFamily开始看电视节目"); zhangSanFamily.seeTV(); int m=2; System.out.println("hangSanFamily将电视更换到"+m+"频道"); zhangSanFam
12、ily.remoteControl(m); System.out.println("haierTV的频道是"+haierTV.getChannel(); System.out.println("hangSanFamily再看电视节目"); zhangSanFamily.seeTV(); 3.实验结果实验3 共饮同井水1.实验要求 编写程序模拟两个村庄共用一口水井。编写一个Village类,该类有一个静态的int型成员变量waterAmount,用于模拟井水的水量。在主类Land的main()方法中创建两个村庄,一个村庄改变了waterAmount的值,另
13、一个村庄查看waterAmount的值。2.程序模板Village.javapublic class Village static int waterAmount; /模拟水井的水量 int peopleNumber; /村庄的人数 String name; /村庄的名字 Village(String s) name = s; static void setWaterAmount(int m) if(m>0) waterAmount = m; void drinkWater(int n) if( waterAmount-n>=0) waterAmount = waterAmount
14、-n; System.out.println(name+"喝了"+n+"升水"); else waterAmount = 0; static int lookWaterAmount() return waterAmount; void setPeopleNumber(int n) peopleNumber = n; int getPeopleNumber() return peopleNumber; -Land.javapublic class Land public static void main(String args) 代码1 /用类名调用set
15、WaterAmount(int m),并向参数传值200 int leftWater =代码2 /用Village类的类名访问waterAmount System.out.println("水井中有 "+leftWater+" 升水"); Village zhaoZhuang,maJiaHeZhi; zhaoZhuang = new Village("庄"); maJiaHeZhi = new Village("马家河子"); zhaoZhuang.setPeopleNumber(80); maJiaHeZhi.s
16、etPeopleNumber(120); 代码3/zhaoZhuang调用drinkWater(int n),并向参数传值50 leftWater = 代码4/maJiaHeZhi调用lookWaterAmount()方法 String name=maJiaHeZ; System.out.println(name+"发现水井中有 "+leftWater+" 升水"); maJiaHeZhi.drinkWater(100); leftWater = 代码5/zhaoZhuang调用lookWaterAmount()方法 name=zhaoZh
17、; System.out.println(name+"发现水井中有 "+leftWater+" 升水"); int peopleNumber = zhaoZhuang.getPeopleNumber(); System.out.println("庄的人口:"+peopleNumber); peopleNumber = maJiaHeZhi.getPeopleNumber(); System.out.println("马家河子的人口:"+peopleNumber); 3.实验指导l 当java程序执
18、行时,类的字节码文件被加载到存,如果该类没有创建对象,类的实例变量就不会被分配存。但是,类的类变量,在该类被加载到存时,就分配了相应的存变量。如果该类创建对象,那么不同对象的实例变量互不一样,即分配不同的存空间,而类变量不再重新分配存,所有对象共享类变量。l 当类的字节码文件被加载到存时,类的实例方法不会被分配入口地址,只有当该类创建对象后,类中的实例方法才分配入口地址。当使用new运算符和构造方法创建对象时,首先分配成员变量给对象,同时实例方法必须分配入口地址,然后再执行构造方法中的语句,完成必要的初始化。因而实例方法必须由对象调用执行。需要注意的是,当创建第一个对象时,类中的实例方法就分配
19、了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享。对于类中的类方法,在该类被加载到存时,就分配了相应的入口地址,即使该类没有创建对象,也可以直接通过类名调用类方法。4.扩展练习(1) 代码3是否可以是Village.drinkWater(50);,为什么?(2) 代码4是否可以是Village.lookWaterAmount();,为什么?(3) Land类main()方法中倒数第2行代码是否可以更改为: peopleNumber = Village.getPeopleNumber(); 为什么?5.实验结果实验4 求方程的根1.实验要求按照实验要求使用p
20、ackage语句将方程属性即计算根的方法封装在一个有包名的类中,包名是tom.jiafei,类的名字是SquareEquation。编写一个SunRise的主类,该主类使用import语句引入tom.jiafei包中的SquareEquation类。2.程序模板 模板1 将模板1给出的源文件SquareEquation.java编译后得到的字节码文件复制到c:/1000/tom/jiafei目录中。 SquareEquation.javapackage tom.jiafei;public class SquareEquation double a,b,c; double root1,root2
21、; boolean boo; public SquareEquation(double a,double b,double c) this.a=a; this.b=b; this.c=c; if(a!=0) boo=true; else boo=false; public void getRoots() if(boo) System.out.println("是一元2次方程"); double disk=b*b-4*a*c; if(disk>=0) root1=(-b+Math.sqrt(disk)/(2*a); root2=(-b-Math.sqrt(disk)/(
22、2*a); System.out.printf("方程的根:%f,%fn",root1,root2); else System.out.printf("方程没有实根n"); else System.out.println("不是一元2次方程"); public void setCoefficient(double a,double b,double c) this.a=a; this.b=b; this.c=c; if(a!=0) boo=true; else boo=false; 模板2 1.设置classpath。假设本地JDK的
23、安装目录是: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中。 SunRise.javaimport tom.jiafei.*;public class SunRise public static void main(String ar
24、gs) SquareEquation equation=new SquareEquation(4,5,1); equation.getRoots(); equation.setCoefficient(-3,4,5); equation.getRoots(); 3 实验指导n 如果使用import语句引入了整个包中的类,那么可能会增加编译时间。但绝不会影响程序运行的性能。Java运行平台由所需要的Java类库和虚拟机组成,这些类库被包含在一个jrelib中的压缩文件中,当程序执行时,Java运行平台从类库中加载程序真正使用的类字节码到存。n 可以使用import语言引入自定义包中的类,但必须在c
25、lasspath中指明包的位置。实验5 实例成员和类成员1.实验要求 掌握实例成员和类成员的使用方法2.程序模板Example.javaclass A 代码1 /声明一个float型实例变量a 代码2 /声明一个float型类变量b,即static变量b void setA(float a) 代码3 /将参数a的值赋值给成员变量a void setB(float b) 代码4 /将参数b的值赋值给成员变量b float getA() return a; float getB() return b; void inputA() System.out.println(a); static void
26、 inputB() System.out.println(b); public class Example public 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的值设置为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 流程优化子课题
- 大学生职业规划大赛《书法专业》生涯发展展示
- 2025技术合作组建新公司的合同范本
- 游戏行业春节营销策略
- 音乐掌控者模板
- 《车辆交易流程》课件
- 鼻窦炎术后护理指南
- 静疗护理个案分析
- 2025年滨州北海鲲鹏网络文化传媒有限公司招聘笔试参考题库附带答案详解
- 2025年湖南怀化市新晃侗族自治县国有企业招聘笔试参考题库附带答案详解
- 2024中考英语必考1600词汇分类速记表
- 江苏泰州市泰兴经济开发区国有企业招聘笔试题库2024
- 2024年风力发电运维值班员(技师)技能鉴定考试题库-下(判断题)
- DL∕T 1709.3-2017 智能电网调度控制系统技术规范 第3部分:基础平台
- 考核办法和考核方案
- 化妆品生产OEM合同书
- 海上CANTITRAVEL平台桩基施工关键技术应用v7
- 有色金属冶金概论课程教案
- 华为MA5800配置及调试手册
- 中国生产安全行业市场运行动态及投资发展潜力分析报告
- 2023-2024年电子物证专业考试复习题库(含答案)
评论
0/150
提交评论