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)(this.a=a;this,b=b;this,c=c;if(a!=0)boo=true;elseboo=faIse:模板21.设置置asspatk假设本地JDK的安装书目是:D:jdkl.6.在吩咐行执行如下吩咐:setclasspath=D:jdkl.6jrelibrt.jar;.;c:1000;或右击“我的电脑”-属性-系统特性-高级选项-环境变量,将CIaSSPath的值改为ClaSSPath=D:jdkl.6jrelibrt.jar;.;c:1000;2.将模板2给出的Java源程序SunRise.java保存到D:2000中0SunRise.javaimporttom.jiafei.*:publicclassSunRisepublicstaticvoidmain(Stringargs)SquareEquationeqation=newSquareEquation(4,5,1);equation.getRoots();equation.SetCoefficient(-3,4,5);equation.getRoots();)3试验指导假如运用import语句引入了整个包中的类,那么可能会增加编译时间。但绝不会影响程序运行的性能。JaVa运行平台由所须要的JaVa类库和虚拟机组成,这些类库被包含在一个jrelib中的压缩文件中,当程序执行时,Java运行平台从类库中加载程序真正运用的类字节码到内存。可以运用import语言引入自定义包中的类,但必需在CIaSSPath中指明包的位置。试验5实例成员和类成员1 .试验要求驾驭实例成员和类成员的运用方法2 .程序模板Example,javaclassA【代码1】【代码2】/声明一个float型实例变量a声明一个float型类变量b,即static变voidset(floata)【代码3】将参数a的值赋值给成员变量a)voidsetB(floatb)(【代码11将参数b的值赋值给成员变量b)floatgetA()(returna;floatgetB()(returnb;)voidinputA()(System,out.println(八);staticvoidinputB()System,out.println(b);)publicclassExample(publicstaticvoidmain(Stringargs)(【代码5】通过类名操作类变量b,并赋值100【代码6】通过类名调用方法inputB()Acat=newAO: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代码H)/cat调用inputA()0【代码12Cat调用inputB()0【代码13dog调用inulA()。代码14dog调用inputB()0试验6银行账户I.试验要求声明银行账户类,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等信息,成员方法包括开户、存款、取款、查询(余额、明细)、销户等操作。publicclassAccountprivateStringacctNumber;privateStringCustomerName;privateStringacctOpenTime;privateStringCustoinerIdNuin;privatedoublebalance;publicAccount(StringaccoutnNumber)this.acctNumber=accoutnNumber;public.AccountOpenAccount(StringaccountNumber)returnnewAccount(accountNumber);)publicvoidsave(doublemoney)this,balance+=money;publicvoidqueryOSystem,out.printIn(Balanceis:"+balance);2.试验结果五、本次上机体会创建一个ReCtangIe类,添加两个属性Width、heighto(1)在ReCtangle中添加两个方法计算矩形的周长和面积。(2)编程利用ReCtangIe输出个矩形的周氏和面积。设计一个Aray类,添加一个整型数组,添加构造方法对数组赋初值。(1)为Airay类添加数组求和方法,添加返回求和值的方法。(2)编程利用Array计算数组的和值并输出。(试验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm,右2.1cm;字体:宋体小四号,1.25倍行距.)