实验71.编一个程序,包含以下文件。(1)Shape.java文件,在该文件中定义接口Shape,该接口在shape包中。属性:PI。方法:求面积的方法area()。(2)Circle.java文件,在该文件中定义圆类Circle,该类在circle包中,实现Shape接口。属性:圆半径radius。方法:构造方法;实现接口中求面积方法area();求周长方法perimeter()。(3)“Cylinder.java”文件,在该文件中定义圆柱体类Cylinder,该类口在cylinder包中,继承圆类。属性:圆柱体高度height。方法:构造方法;求表面积方法area();求体积方法volume()。(4)X5_3_6.java文件,在该文件中定义主类X5_3_6,该类在默认包中,其中包含主方法main(),在主方法中创建两个圆类对象cir1和cir2,具体尺寸自己确定,并显示圆的面积和周长;再创建两个圆柱体类的对象cy1和cy2,具体尺寸自己确定,然后分别显示圆柱体cy1和cy2的底圆的面积和周长以及它们各自的体积和表面积。【编程分析】本题主要考察接口、包、继承、封装等问题。编程步骤如下:第一步:首先创建p1包,在其中创建Shape接口//Shape.java文件packagep1;//创建p1包publicinterfaceShape{//定义Shape接口…}第二步:创建Circle类和Cylinder类,它们都定义在p2包中。//Circle.java文件packagep2;//创建p2包importp1.*;publicclassCircleimplementsShape{//定义实现Shape接口的Circle类…}//Cylinder.java文件packagep2;publicclassCylinderextendsCircle{//创建继承Circle类的Cylinder类…}第三步:创建主类,在其中的main()方法中创建对象,实现相应的功能。//X5_3_6.java文件packagep3;importp2.*;publicclassX5_3_6{//定义主类publicstaticvoidmain(String[]args){…}}【参考程序】//X5_3_6.java文件packagep3;importp2.*;publicclassX5_3_6{//定义主类publicstaticvoidmain(String[]args){Circlecir1=newCircle(120.5);Circlecir2=newCircle(183.8);System.out.println(cir1.area:+cir1.area());System.out.println(cir1.perimeter:+cir1.perimeter());System.out.println(cir2.area:+cir2.area());System.out.println(cir2.perimeter:+cir2.perimeter());Cylindercy1=newCylinder(27.3,32.7);Cylindercy2=newCylinder(133.5,155.8);System.out.println(cy1.area:+cy1.area());System.out.println(cy1.volume:+cy1.volume());System.out.println(cy2.area:+cy2.area());System.out.println(cy2.volume:+cy2.volume());}}//Shape.java文件packagep1;//创建p1包publicinterfaceShape{//定义Shape接口doublePI=Math.PI;doublearea();//求面积方法}//Circle.java文件packagep2;//创建p2包importp1.*;publicclassCircleimplementsShape{//定义实现Shape接口的Circle类doubleradius;//半径publicCircle(doubler){radius=r;}publicdoublearea(){//实现Shape接口中的方法(这是必须的)returnPI*radius*radius;}publicdoubleperimeter(){//定义求圆周长的方法return2*PI*radius;}}//Cylinder.java文件packagep2;publicclassCylinderextendsCircle{//创建继承Circle类的Cylinder类doubleheight;publicCylinder(doubler,doubleh){super(r);height=h;}publicdoublearea(){return2*PI*radius*radius+2*PI*radius*height;}publicdoublevolume(){returnPI*radius*radius*height;}}2)定义一个接口OneToN,在接口中包含一个抽象方法disp()。定义Sum和Pro类,并分别用不同代码实现ONeToN的disp()方法,在Sum的方法中计算1~n的和,在Pro的方法中计算1~n的乘积interfaceOneToN{publicvoiddisp(intn);}classSumimplementsOneToN{publicvoiddisp(intn){intsum=0;for(inti=1;i=n;i++){sum=sum+i;}System.out.println(sum);}}classProimplementsOneToN{publicvoiddisp(intn){longpro=1;for(inti=1;i=n;i++){pro=pro*i;}System.out.println(pro);}}publicclassinterfaceTest{publicstaticvoidmain(String[]args){//TODOcodeapplicationlogichereSumx=newSum();x.disp(100);}}3)改错,上传正确答案,并以注释形式给出错误原因classSuperClass{publicSuperClass(Stringmsg){System.out.println(SuperClassconstructor:+msg);}}classSubClassextendsSuperClass{publicSubClass(Stringmsg){Super(msg);//父类没有无参的构造方法,应采用super显示调用父类的构造方法System.out.println(SubClassconstructor);}}publicclassTest1{publicstaticvoidmain(String[]args){SubClassdescendent=newSubClass();}}4)利用多态性编程,创建一个抽象类shape类,定义一个函数Area为求面积的公共方法,再定义Triangle,Rectangle和circle类,实现computerArea方法;增加display方法,显示name和area,并在Triangle,Rectangle和circle类覆盖该方法,并为每个类增加自己的构造方法;在主类中创建不同对象,求得不同形状的面积。答案略。实验8一、选择题1.关于异常的含义,下列描述中最正确的一个是(D)。A.程序编译错误B.程序语法错误C.程序自定义的异常事件D.程序编译或运行时发生的异常事件【解析】异常就是程序编译或运行时发生的异常事件。2.自定义异常时,可以通过对下列哪一项进行继承?(C)A.Error类B.Applet类C.Exception类及其子类D.AssertionError类【解析】自定义异常类时,该类必须继承Exception类及其子类。3.对应try和catch子句的排列方式,下列哪一项是正确的?(A)A.子类异常在前,父类异常在后B.父类异常在前,子类异常在后C.只能有子类异常D.父类和子类不能同时出现在try语句块中【解析】对应try和catch子句的排列方式,要求子类异常(范围小的异常)在前,父类异常(范围大的异常)在后。4.运行下面程序时,会产生什么异常?(A)publicclassX7_1_4{publicstaticvoidmain(String[]args){intx=0;inty=5/x;int[]z={1,2,3,4};intp=z[4];}}A.ArithmeticExceptionB.NumberFormatExceptionC.ArrayIndexOutOfBoundsExceptionD.IOException【解析】当程序执行到“inty=5/x”语句时,发生异常,程序中止执行,因此发生ArithmeticException异常。5.运行下面程序时,会产生什么异常?(C)publicclassX7_1_5{publicstaticvoidmain(String[]args){int[]z={1,2,3,4};intp=z[4];intx=0;inty=5/x;}}A.ArithmeticExceptionB.NumberFormatExceptionC.ArrayIndexOutOfBoundsExceptionD.IOException【解析】当程序执行到“intp=z[4]”语句时,发生异常,程序中止执行,因此发生ArrayIndexOutOfBoundsException异常。6.下列程序执行的结果是(B)。publicclassX7_1_6{publicstaticvoidmain(String[]args){try{return;}finally{System.out.println(Finally);}}}A.程序正常运行,但不输出任何结果B.程序正常运行,并输出FinallyC.编译通过,但运行时出现异常D.因为没有catch子句,因此不能通过编译【解析】在执行try-catch-finally语句块时,最后必须执行finally语句块中的内容,而本程序没有异常发生,因此程序正常运行,并输出Finally。7.下列代码中给出正确的在方法体内抛出异常的是(B)。A.newthrowException();B.thrownewException();C.throwsIOException();D.throwsIOException;【解析】在方法体内抛出异常时只能使用throw,而不能使用throws,另外,“newException()”是创建一个异常,因此B是正确的。8.下列描述了Java语言通过面相对象的方法进行异常处理的好处,请选出不在这些好处范围之内的一项(C)A.把各种不同的异常事件进行分类,体现了良好的继承性B.把错误处理代码从常规代码中分离出来C.可以利用异常处理机制代替传统的控制流程D.这种机制对具有动态运行特性的复杂程序提供了强有力的支持【解析】异常处理机制不能代替传统的流程控制。二、编程题1.编写一个系统自动抛出的、系统自行处理的数组大小为负数的程序。【编程分析】当编写的程序中没有处理异常的语句时,系统会自动抛出异常,并自行进行处理。【参考程序】publicclassX7_3_1{publicstaticvoidmain(String[]args){int[]a=newint[-5];for(inti=0;ia.length;i++){a[i]=10+i;}}}【运行结果】Exceptioninthreadmainjava.lang.NegativeArraySizeExceptionatX7_3_1.