JAVA实验79+答案.docx
- 文档编号:25854627
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:23
- 大小:21.21KB
JAVA实验79+答案.docx
《JAVA实验79+答案.docx》由会员分享,可在线阅读,更多相关《JAVA实验79+答案.docx(23页珍藏版)》请在冰豆网上搜索。
JAVA实验79+答案
实验7
欧阳光明(2021.03.07)
1.编一个程序,包含以下文件。
(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){
//TODOcodeapplicationlogichere
Sumx=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.NumberFormatException
C.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.NumberFormatException
C.ArrayIndexOutOfBoundsExceptionD.IOException
【解析】当程序执行到“intp=z[4]”语句时,发生异常,程序中止执行,因此发生ArrayIndexOutOfBoundsException异常。
6.下列程序执行的结果是(B)。
publicclassX7_1_6{
publicstaticvoidmain(String[]args){
try{
return;
}
finally{
System.out.println("Finally");
}
}
}
A.程序正常运行,但不输出任何结果B.程序正常运行,并输出Finally
C.编译通过,但运行时出现异常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;i a[i]=10+i; } } } 【运行结果】 Exceptioninthread"main"java.lang.NegativeArraySizeException atX7_3_1.main(X7_3_1.java: 3) 2.编写一个由throw抛出的、系统自行处理的数组下标越界的程序。 【编程分析】 当由throw抛出异常后,如果程序本身不进行异常处理,Java系统将采用默认的处理方式进行处理。 【参考程序】 importjava.io.*; publicclassX7_3_2{ publicstaticvoidmain(String[]args)throwsIOException{ InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); int[]a=newint[5]; intn=Integer.parseInt(br.readLine()); if(n>5)//当输入的n值大于5时将由throw抛出异常 thrownewArrayIndexOutOfBoundsException(); System.out.println("程序继续执行"); for(inti=0;i a[i]=10+i; System.out.print(a[i]+"\t"); } System.out.println(); } } 【运行结果】 8 Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException atC1.main(C1.java: 9) 3.编写一个系统自动抛出的、由try-catch捕捉处理的分母为0以及数组下标越界的程序。 【编程分析】 当在try语句块中出现分母为0的情况时,如果在catch参数中有ArithmeticException对象,则就能捕捉到该异常并进行处理;同样,当在try语句块中出现分母为数组下标越界的情况时,如果在catch参数中有ArrayIndexOutOfBoundsException对象,则就能捕捉到该异常并进行处理。 【参考程序】 importjava.io.*; publicclassX7_3_3{ publicstaticvoidmain(Stringargs[])throwsIOException{ InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); System.out.println("请输入两个整数: "); inta=Integer.parseInt(br.readLine()); intb=Integer.parseInt(br.readLine()); try{//当输入的b为0时,就会出现算术异常 System.out.println(a/b); } catch(ArithmeticExceptione){//捕捉算术异常并进行处理 System.out.println("出现被0除的情况! "); } intc[]=newint[4],sum=0; try{//当出现数组下标越界时就会抛出异常 for(inti=0;i<5;i++)sum+=c[i]; System.out.println("sum="+sum); } catch(ArrayIndexOutOfBoundsExceptione){//捕捉数组下标越界异常并处理 System.out.println("数组下标越界! "); } } } 【运行结果】 请输入两个整数: 20 0 出现被0除的情况! 数组下标越界! 4.编写一个由throw抛出的、由try-catch捕捉处理的分母为0以及数组下标越界的程序。 【编程分析】 当在程序出现异常之前利用throw语句来抛出异常,可以做到防患于未然,提前进行异常处理,将由被动处理异常转变为主动防止异常发生。 【参考程序】 importjava.io.*; publicclassX7_3_4{ publicstaticvoidmain(Stringargs[])throwsIOException{ InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); System.out.println("请输入两个整数: "); inta=Integer.parseInt(br.readLine()); intb=Integer.parseInt(br.readLine()); try{ if(b==0) thrownewArithmeticException("抛出算术异常"); System.out.println(a/b); } catch(ArithmeticExceptione){ e.printStackTrace(); System.out.println("出现被0除的情况! "); } intc[]={1,2,3,4},sum=0; try{ for(inti=0;i<5;i++){ if(i>=4) thrownewArrayIndexOutOfBoundsException("抛出数组下标越界异常"); sum+=c[i]; System.out.println("sum="+sum); } } catch(ArrayIndexOutOfBoundsExceptione){ e.printStackTrace(); System.out.println("数组下标越界! "); } } } 5.自定义两个异常类NumberTooBigException和NumberTooSmallException,在其中定义各自的构造方法,分别打印输出“发生数字太大异常”和“发生数字太小异常”。 然后在主类中定义一个带throws的方法numberException(intx),当x>100时通过throw抛出NumberTooBigException异常,当x<0时通过throw抛出NumberTooSmallException异常;最后在main()方法中调用该方法,实现从键盘中输入一个整数,如果输入的是负数,引发NumberTooSmallException异常,如果输入的数大于100,引发。 NumberTooBigException异常,否则输出“没有发生异常”。 【编程分析】本题主要考察自定义异常的方法。 第一步: 定义异常类NumberTooBigException classNumberTooBigExceptionextendsException{ NumberTooBigException(){ super("发生数字太大异常"); } } 第二步: 定义异常类NumberTooSmallException classNumberTooSmallExceptionextendsException{ NumberTooSmallException(){ super("发生数字太小异常"); } } 第三步: 在主类X7_3_5中定义numberException()方法。 publicstaticvoidnumberException(intx) throwsNumberTooBigException,NumberTooSmallException{ if(x>100) thrownewNumberTooBigException(); elseif(x<0) thrownewNumberTooSmallException(); else System.out.println("没有异常发生"); } 第四步: 在main()方法中调用numberException()方法并捕捉和处理由此方法引起的异常。 【参考程序】 importjava.io.*; publicclassX7_3_5{ publicstaticvoidmain(Stringargs[])throwsIOException{ InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); System.out.print("请输入一个整数: "); inta=Integer.parseInt(br.readLine()); try{ numberException(a); }catch(NumberTooBigExceptione){ e.printStackTrace(); }catch(NumberTooSmallExceptione){ e.printStackTrace(); } } publicstaticvoidnumberException(intx)throwsNumberTooBigException,NumberTooSmallException{ if(x>100) thrownewNumberTooBigException(); elseif(x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 实验 79 答案