实验六内部类与异常类.docx
- 文档编号:8813205
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:19
- 大小:45.92KB
实验六内部类与异常类.docx
《实验六内部类与异常类.docx》由会员分享,可在线阅读,更多相关《实验六内部类与异常类.docx(19页珍藏版)》请在冰点文库上搜索。
实验六内部类与异常类
实验六内部类和异常类
1.实验目的
1、掌握内部类的常用方法
2、掌握匿名类的常用方法
3、掌握接异常类的常用方法
2.实验内容
1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1)实验1红牛农场
packagefour;
publicclassRedCowForm{
StringformName;
RedCowcow;
//【代码1】//用内部类RedCow声明对象cow
RedCowForm(){
}
RedCowForm(Strings){
cow=newRedCow(150,112,5000);
//【代码2】//创建cow
formName=s;
}
publicvoidshowCowMess(){
cow.speak();
}
classRedCow{
StringcowName="红牛";
intheight,weight,price;
RedCow(inth,intw,intp){
height=h;
weight=w;
price=p;
}
voidspeak(){
System.out.println(cowName+",身高:
"+height+"cm,体重:
"+weight+"kg");
System.out.println("生活在"+formName);
}
}
}
packagefour;
publicclassMainClass{
publicstaticvoidmain(String[]args){
RedCowFormform=newRedCowForm("红牛农场");
form.showCowMess();
}
}
2)实验2检查危险品
packagefour;
publicclassGoods{
booleanisDanger;
Stringname;
publicbooleanisDanger(){
returnisDanger;
}
publicvoidsetDanger(booleanboo){
isDanger=boo;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Strings){
name=s;
}
}
packagefour;
publicclassDangerExceptionextendsException{
Stringmessage;
publicDangerException(){
message="危险品!
";
}
publicvoidtoShow(){
System.out.print(message+"");
}
}
packagefour;
publicclassMachine{
Goods[]goods;
publicvoidcheckBag(Goodsgoods)throwsDangerException{
if(goods.isDanger){
thrownewDangerException();
//【代码1】//用throw抛出一个DangerException的匿名类
}
}
}
packagefour;
publicclassCheck{
publicstaticvoidmain(String[]args){
Machinemachine=newMachine();
Stringname[]={"苹果","炸药","西服","硫酸","手表","硫磺"};
Goods[]goods=newGoods[name.length];//检查6件物品
for(inti=0;i goods[i]=newGoods(); if(i%2==0){ goods[i].setDanger(false); goods[i].setName(name[i]); } else{ goods[i].setDanger(true); goods[i].setName(name[i]); } } for(inti=0;i try{ machine.checkBag(goods[i]); System.out.println(goods[i].getName()+"检查通过"); } catch(DangerExceptione){ e.toShow(); //【代码2】//e调用toShow()方法 System.out.println(goods[i].getName()+"被禁止! "); } } } } 3)实验3内部类的使用方法 packagefour; publicclassOuter { privatestaticintsize; /**内部类Inner的声明*/ publicclassInner { privateintsize; /**方法doStuff()*/ publicvoiddoStuff(intsize) { size=size+3;//【代码1】//存取局部变量size加3 this.size=size+2;//【代码2】//存取其内部类的成员变量size加2 Outer.this.size=size+1;//【代码3】存取其外部类的成员变量size加1 System.out.println(size+""+this.size+""+Outer.this.size); } }//内部类Inner结束 /**类Outer中定义的实例方法testInner()方法*/ publicvoidtestInner() { Inneri=newInner(); i.doStuff(size);//调用Inner类中的doStuff方法 } /**main()方法*/ publicstaticvoidmain(Stringargs[]) { Outero=newOuter(); o.testInner();//调用Outer类中的testInner方法 } }//类Outer结束 4)实验4匿名类的使用方法 packagefour; interfaceSquare {doublegetSquare(intn); } interfaceSqrt {publicdoublegetSqrt(intx); } classA {voidp(Squaresquare) { System.out.println(square);//输出getSquare方法计算后的结果 } voidk(Sqrtsqrt) { System.out.println(sqrt);//输出getSqrt方法计算后的结果 } } publicclassAnonymity {publicstaticvoidmain(Stringargs[]) { Aa=newA(); a.p(null);//实现Square接口,重写getSquare方法,返回n的平方 Sqrtsqrt=newSqrt() {publicdoublegetSqrt(intx){ returnMath.sqrt(x); } };//重写getSqrt方法,返回x的开平方根,用静态Math.sqrt方法来运算 System.out.println("计算开平方: "+sqrt.getSqrt(5)); } } 5)实验5异常类使用方法 packagefour; classMyExceptionextendsException { Stringmessage; MyException(Stringstr) { message=str;//把参数的引用传给message成员变量 } publicStringgetMessage() { returnmessage;//返回message成员变量 } } abstractclassC { abstractintf(intx,inty)throwsMyException; } classBextendsC { intf(intx,inty)throwsMyException { if(x<100&&y<100)//判断x、y都不大于100 { thrownewMyException("乘数超过100");//抛出一个新建的MyException对象,MyException对象中构造方法传入的参数内容为: 乘数超过100 } returnx*y; } } publicclasseClass { publicstaticvoidmain(Stringargs[]) { Ca; a=newB();//设计a对象的B类上转型对象 try { System.out.println(a.f(12,10)); a.f(150,250);//使用f()方法时传入一个大于100的乘数 } catch(MyExceptione) { System.out.println("x、y都不大于100");//输出错误信息 } } } 2、设计编写程序完成以下任务。 1)假如要从命令行获得两个整数,自定义两个异常类来描述可能发生的异常: ParameterNumberException(参数个数异常),ParameterFormateException(参数格式异常),设计一个类,在check(Stringargs[])方法中通告这两个异常,在main方法中判断相应的情况下触发异常,然后捕获异常,对它们进行处理。 (知识点: 异常处理机制) 判断长度和类型不准,相应条件分支抛出对应的自定义异常即可 2)编写一个异常类MyException,在编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。 最后编写一个主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。 3.实验步骤 略 4.评分标准 1.A——内容功能完善,编程风格好,人机接口界面好; 2.B——内容功能完善,编程风格良好,人机接口界面良好; 3.C——完成必做内容; 4.D——能完成必做内容; 5.E——未按时完成必做内容,或者抄袭(雷同者全部为E). 参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。 (压缩包的文件名为: 学号后三位和名字开头字母,如109zhh.RAR|ZIP) 附录: 实验1红牛农场 模板代码 RedCowForm.java publicclassRedCowForm{ StringformName; RedCowcow; //【代码1】//用内部类RedCow声明对象cow RedCowForm(){ } RedCowForm(Strings){ Cow=newRedCow(150,112,5000); //【代码2】//创建cow formName=s; } publicvoidshowCowMess(){ cow.speak(); } classRedCow{ StringcowName="红牛"; intheight,weight,price; RedCow(inth,intw,intp){ height=h; weight=w; price=p; } voidspeak(){ System.out.println(cowName+",身高: "+height+"cm,体重: "+weight+"kg"); System.out.println("生活在"+formName); } } } MainClass.java publicclassMainClass{ publicstaticvoidmain(String[]args){ RedCowFormform=newRedCowForm("红牛农场"); form.showCowMess(); } } 实验2检查危险品 模板代码 Goods.java publicclassGoods{ booleanisDanger; Stringname; publicbooleanisDanger(){ returnisDanger; } publicvoidsetDanger(booleanboo){ isDanger=boo; } publicStringgetName(){ returnname; } publicvoidsetName(Strings){ name=s; } } DangerException.java publicclassDangerExceptionextendsException{ Stringmessage; publicDangerException(){ message="危险品! "; } publicvoidtoShow(){ System.out.print(message+""); } } Machine.java publicclassMachine{ Goods[]goods; publicvoidcheckBag(Goodsgoods)throwsDangerException{ if(goods.isDanger){ thrownewDangerException(goods);//【代码1】//用throw抛出一个DangerException的匿名类 } } } Check.java publicclassCheck{ publicstaticvoidmain(String[]args){ Machinemachine=newMachine(); Stringname[]={"苹果","炸药","西服","硫酸","手表","硫磺"}; Goods[]goods=newGoods[name.length];//检查6件物品 for(inti=0;i goods[i]=newGoods(); if(i%2==0){ goods[i].setDanger(false); goods[i].setName(name[i]); } else{ goods[i].setDanger(true); goods[i].setName(name[i]); } } for(inti=0;i try{ machine.checkBag(goods[i]); System.out.println(goods[i].getName()+"检查通过"); } catch(DangerExceptione){ //【代码2】//e调用toShow()方法 System.out.println(goods[i].getName()+"被禁止! "); } } } } 实验3内部类的使用 模板代码 Outer.javal publicclassOuter { privatestaticintsize; /**内部类Inner的声明*/ publicclassInner { privateintsize; /**方法doStuff()*/ publicvoiddoStuff(intsize) { 【代码1】//存取局部变量size加3 【代码2】//存取其内部类的成员变量size加2 【代码3】//存取其外部类的成员变量size加1 System.out.println(size+""+this.size+""+Outer.this.size); } }//内部类Inner结束 /**类Outer中定义的实例方法testInner()方法*/ publicvoidtestInner() { Inneri=newInner(); 【代码4】//调用Inner类中的doStuff方法 } /**main()方法*/ publicstaticvoidmain(Stringargs[]) { Outero=newOuter(); 【代码5】//调用Outer类中的testInner方法 } }//类Outer结束 实验4匿名类的使用方法 模板代码 Anonymity.java interfaceSquare {doublegetSquare(intn); } interfaceSqrt {publicdoublegetSqrt(intx); } classA {voidp(Squaresquare) { System.out.println(【代码1】);//输出getSquare方法计算后的结果 } voidk(Sqrtsqrt) { System.out.println(【代码2】);//输出getSqrt方法计算后的结果 } } publicclassAnonymity {publicstaticvoidmain(Stringargs[]) { Aa=newA(); a.p(【代码3】);//实现Square接口,重写getSquare方法,返回n的平方 Sqrtsqrt=newSqrt() {【代码4】};//重写getSqrt方法,返回x的开平方根,用静态Math.sqrt方法来运算 System.out.println("计算开平方: "+sqrt.getSqrt(5)); } } 实验5异常类使用方法 模板代码 eClass.java classMyExceptionextendsException { Stringmessage; MyException(Stringstr) { 【代码1】//把参数的引用传给message成员变量 } publicStringgetMessage() { 【代码2】//返回message成员变量 } } abstractclassA { abstractintf(intx,inty)throwsMyException; } classBextendsA { intf(intx,inty)throwsMyException { if(【代码3】)//判断x、y都不大于100 【代码4】//抛出一个新建的MyException对象,MyException对象中构造方法传入的参数内容为: 乘数超过100 returnx*y; } } publicclasseClass { publicstaticvoidmain(Stringargs[]) { Aa; 【代码5】//设计a对象的B类上转型对象 try { System.out.println(a.f(12,10)); 【代码6】//使用f()方法时传入一个大于100的乘数 } catch(MyExceptione) { 【代码7】输出错误信息 } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 部类 异常