Java程序设计试验2学生版.docx
华北电力高校实验报告试名称JaVa程序而对对象设计(汁课程名称JaVa程序设计专业班级:学生姓名:学号:成绩:指导老师:张学斌试验日期:创建一个对象时,成员变量被安排空间,这些内存空间称作该对象的实体或变量,而对象中存放着引用,以确保这些变量被该对象操作运用。空对象不能运用,即不能让一个空对象去调用方法产生行为。假如程序中运用了空对象,在运行时会产生异样:NulIPointerException.对象时动态地安排实体的,Java的编译器对空对象不做检查。因此,在编译时要避开运用空对象。1.4试验改进(编写程序,并给出结果)I.改进SPeedUPo方法,使得VehiCIe类的对象加速时不能将SPeed值超过200.2.改进SPeedDOIVn()方法,使得VehiCle类的对象在减速时不能将speed值小于0.3.增进一个刹车方法Voiclbrake。,VehicIe类的对象调用它能将SPeed的值变成0.1.5试验结果试验2家中的电视1.试验要求编写一个JaVa应用程序,模拟家庭买一台电视,即家庭将电视作为H己的一个成员,即通过调用一个方法将某个电视的引用传递给自己的电视成员。具体要求如下:有三个源文件,其中TV.java中的TV类负责创建“电视”对象。Family.java中的Eamiiy类负责创建“家庭"对象,MainClass.java是主类。在主类的main()方法中首先运用TV类创建一个对象haierTV,然后运用Family类再创建一个对象ZhangsanFamily,并将从前TV类的实例haierTV的弓|用传递给ZhangsanEami1y对象的成员变量homeTV。2.程序模板TV.javapublicclassTVintchannel;电视频道voidSetChannel(intin)if(m>=l)channel=m;)intgetChannel()returnchannel;)voidShowProgramOswitch(channel)case 1 :SyStem.out.println("综合频道”);break;case 2 :SySten1.oUt.printIn("经济频道");break;case 3 :SySten.out.printIn("文艺频道”);break;case 4 :SySten.out.printIn("国际频道");break;case 5 :SyStem.out.printin("体育频道");break;default:SyStem.out.println("不能收看"+channel+”频道”);)Family,javapublicclassFamilyTVhomeTV:voidbyTV(TVtv)【代码1】将参数tv赋值给homeTVvoidVemoteControl(intm)homeTV.setChannel(m);voidseeTV()(homeTV.showProgram();/homeTV调用ShOWPrOgramo方法)MainClass.javapublicclassMainClasspublicstaticvoidmain(Stringargs)TVhaierTV=newTV();【代码2/haierTV调用SetChannel(intm),并向参数m传递5System,out.printIn("haierTV的频道是"+haierTV.getChannel();FamilyZhangSanFamiIy=newFamiIy();代码3/ZhangSanFami1y调用voidbuyTV(TVtv)方法,并将haierTV传递给参数TVSystem,out.println(*ZhangSanFamiIy起先看电视节目”);ZhangSanFamily.seeTV();intm=2:System,out.PrintIn("hangSanFamiIy将电视更换到“+m+”频道”);ZhangSanEamily.remoteControl(m);System,out.printInC,haierTV的频道是*+haierTV.getChannelO);System,out.printInCrKangSanFamiIy再看电视节目”):ZhangSanFamily.seeTV();)3.试验结果试验3共饮同井水1 .试验要求编写程序模拟两个村庄共用一口水井。编写一个ViIlage类,该类有一个静态的int型成员变量WaterAmount,用于模拟井水的水量。在主类1.and的main()方法中创建两个村庄,*个村庄变更了WaterAmOUnt的值,另一个村庄查看IVaterAmOUnt的值。2 .程序模板Village,javapublicclassVillage(staticintWaterAmount;模拟水井的水量intpeopleNumber;村庄的人数Stringname;/村庄的名字Village(Strings)name=s;)staticvoidSetWaterAmount(intm)if(n>O)WaterAmount=m;)voiddrinkWater(intn)if(WaterAmOUnt-n>=0)watermount=WaterAmOUntf;System,out.Println(name+"喝了"+n+"升水”);elsewatermount=O;)staticint100kWaterAmountOreturnWaterAmount;voidSetBeopleNumber(intn)PeopleNumber=n;)intgetPeopleNumber()returnpeopIeNumber;)1.and,javapublicclass1.andpublicstaticvoidmain(Stringargs)(【代码1J/用类名调用SetWaterAJDoUnt(intm),并向参数传值200intIeftWater=【代码2】用Village类的类名访问WaterAmountSyStem.out.println("水井中有"+IeftWater+"升水”);VillageZhaOZhUang,majialleZhi;ZhaoZhuang=newVilIage("赵庄”);najialIeZhi=newViIlage("马家河子”);zhaoZhuang.SetPeopleNumber(80);najialleZhi.SetPeopleNumber(120);代码3/zhaoZhuang调用drinkWater(intn),并向参数传值50IeftWater=【代码4】/najialleZhi调用100kWaterAmountO方法Stringname=maJiaHeZhi.name;SyStem.out.printin(name+"发觉水井中有"+IeftWater+”升水”);majiaHeZhi.drinkWater(100);IeftWater=【代码5】ZhaoZhUang调用100kNaterAmOUnIo方法name=zhaoZhuang.name;SyStem.out.printIn(name+”发觉水井中有"+IeftWater+”升水”);intpeopleNumber=zhaoZhuang.getPeopIeNumberO;System.OUt.rintln("赵庄的人口:"+PeOPleNUmber);PeopleNumbermajiaHeZhi.getBeopleNmber():System.OUt.printin("马家河子的人口:"+PeoPleNUmber);)3 .试验指导当java程序执行时,类的字节码文件被加载到内存,假如该类没有创建对象,类的实例变量就不会被安排内存。但是,类的类变量,在该类被加载到内存时,就安排了相应的内存变量。假如该类创建对象,那么不同对象的实例变量互不相同,即安排不同的内存空间,而类变量不再重新安排内存,全部对象共享类变量。当类的字节码文件被加载到内存时,类的实例方法不会被安排入口地址,只有当该类创建对象后,类中的实例方法才安排入1地址。当运用new运算符和构造方法创建对象时,首先安排成员变量给对象,同时实例方法必需安排入口地址,然后再执行构造方法中的语句,完成必要的初始化。因而实例方法必需由对象调用执行。须要留意的是,当创建第-个对象时,类中的实例方法就安排了入口地址,当再创建对象时,不再安排入口地址,也就是说,方法的入口地址被全部的对象共享。对于类中的类方法,在该类被加载到内存时,就安排了相应的入口地址,即使该类没有创建对象,也可以干脆通过类名调用类方法。4 .扩展练习(1)【代码3】是否可以是ViIIage.drinkWater(50);,为什么?(2)代码4是否可以是ViHage.100kWaterAmount();,为什么?(3)1.and类main。方法中倒数第2行代码是否可以更改为:PeopleNumber=Village,getPeopIeNumberO;为什么?5.试验结果试验4求方程的根1.试验要求根据试验要求运用package语句将方程属性即计算根的方法封装在一个有包名的类中,包名是tom.jiafei,类的名字是SqUareEqUatiOn。编写一个SUnRiSe的主类,该主类运用import语句引入tom.jiafei包中的SquareEquation类。2.9蝴模板1将模板1给出的源文件SquareEquation.java编译后得到的字节码文件复制到c:/1000/tom/jiafei书目中。SquareEquation.javapackagetom.jiafei:publicclassSquareEquation(doublea,b,c;doublerootl,root2;booleanboo;publicSquareEquation(doublea,doubleb,doublec)this,a=a;this,b=b;this,c=c;if(a!=O)boo=true;elseboo=false;IpublicvoidgetRoots()if(boo)System.OUt.printin("是一元2次方程");doubledisk=b*b-4*a*c;if(clisk>=O)rootl=(-b+Math.sqrt(disk)(2*a);root2=(-b-Math.sqrt(disk)(2*a);System.OUt.printf("方程的根:%f,%fn*,rootl,root2);)elseSystem.out.PrinIf("方程没有实根n");)elseSystem,out.PrintIn("不是一元2次方程”);)publicvoidSetCoefficient(doublea,doubleb,doublec)(