JAVA实验7-9+答案(15页).doc
-JAVA实验7-9+答案-第 15 页实验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文件package p1;/ 创建p1包public interface Shape/ 定义Shape接口第二步:创建Circle类和Cylinder类,它们都定义在p2包中。/ Circle.java文件package p2;/ 创建p2包import p1.*;public class Circle implements Shape/ 定义实现Shape接口的Circle类/ Cylinder.java文件package p2;public class Cylinder extends Circle/ 创建继承Circle类的Cylinder类第三步:创建主类,在其中的main()方法中创建对象,实现相应的功能。/ X5_3_6.java文件package p3;import p2.*;public class X5_3_6 / 定义主类 public static void main(String args) 【参考程序】/ X5_3_6.java文件package p3;import p2.*;public class X5_3_6 / 定义主类 public static void main(String args) Circle cir1 = new Circle(120.5); Circle cir2 = new Circle(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(); Cylinder cy1 = new Cylinder(27.3,32.7); Cylinder cy2 = new Cylinder(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文件package p1;/ 创建p1包public interface Shape/ 定义Shape接口double PI=Math.PI;double area();/ 求面积方法/ Circle.java文件package p2;/ 创建p2包import p1.*;public class Circle implements Shape/ 定义实现Shape接口的Circle类double radius;/ 半径public Circle(double r)radius = r;public double area()/ 实现Shape接口中的方法(这是必须的)return PI*radius*radius;public double perimeter()/ 定义求圆周长的方法return 2*PI*radius;/ Cylinder.java文件package p2;public class Cylinder extends Circle/ 创建继承Circle类的Cylinder类double height;public Cylinder(double r,double h)super(r);height = h;public double area()return 2*PI*radius*radius+2*PI*radius*height;public double volume()return PI*radius*radius*height;2)定义一个接口OneToN,在接口中包含一个抽象方法disp()。定义Sum和Pro类,并分别用不同代码实现ONeToN的disp()方法,在Sum的方法中计算1n的和,在Pro的方法中计算1n的乘积interface OneToNpublic void disp(int n);class Sum implements OneToNpublic void disp(int n)int sum=0;for(int i=1;i<=n;i+)sum=sum+i;System.out.println(sum);class Pro implements OneToNpublic void disp(int n)long pro=1;for(int i=1;i<=n;i+)pro=pro*i;System.out.println(pro);public class interfaceTest public static void main(String args) / TODO code application logic here Sum x=new Sum(); x.disp(100);3)改错,上传正确答案,并以注释形式给出错误原因class SuperClasspublic SuperClass(String msg) System.out.println("SuperClass constructor: " +msg);class SubClass extends SuperClasspublic SubClass(String msg)Super(msg); /父类没有无参的构造方法,应采用super显示调用父类的构造方法System.out.println("SubClass constructor"); public class Test1 public static void main(String args) SubClass descendent = new SubClass();4) 利用多态性编程,创建一个抽象类shape类,定义一个函数Area为求面积的公共方法,再定义Triangle,Rectangle和circle类,实现computerArea方法;增加display方法,显示name和area,并在Triangle,Rectangle和circle类覆盖该方法,并为每个类增加自己的构造方法;在主类中创建不同对象,求得不同形状的面积。答案略。实验8一、选择题1关于异常的含义,下列描述中最正确的一个是( D )。A程序编译错误B程序语法错误C程序自定义的异常事件D程序编译或运行时发生的异常事件【解析】异常就是程序编译或运行时发生的异常事件。2自定义异常时,可以通过对下列哪一项进行继承?( C )AError类BApplet类CException类及其子类DAssertionError类【解析】自定义异常类时,该类必须继承Exception类及其子类。3对应try和catch子句的排列方式,下列哪一项是正确的?( A )A子类异常在前,父类异常在后B父类异常在前,子类异常在后C只能有子类异常 D父类和子类不能同时出现在try语句块中【解析】对应try和catch子句的排列方式,要求子类异常(范围小的异常)在前,父类异常(范围大的异常)在后。4运行下面程序时,会产生什么异常?( A )public class X7_1_4 public static void main(String args) int x = 0;int y = 5/x;int z = 1,2,3,4;int p = z4;AArithmeticExceptionBNumberFormatExceptionCArrayIndexOutOfBoundsException DIOException【解析】当程序执行到“int y = 5/x”语句时,发生异常,程序中止执行,因此发生ArithmeticException异常。5运行下面程序时,会产生什么异常?( C )public class X7_1_5 public static void main(String args) int z = 1,2,3,4;int p = z4;int x = 0;int y = 5/x;AArithmeticExceptionBNumberFormatExceptionCArrayIndexOutOfBoundsException DIOException【解析】当程序执行到“int p = z4”语句时,发生异常,程序中止执行,因此发生ArrayIndexOutOfBoundsException异常。6下列程序执行的结果是( B )。 public class X7_1_6 public static void main(String args) tryreturn;finallySystem.out.println("Finally");A程序正常运行,但不输出任何结果B程序正常运行,并输出FinallyC编译通过,但运行时出现异常D因为没有catch子句,因此不能通过编译【解析】在执行try-catch-finally语句块时,最后必须执行finally语句块中的内容,而本程序没有异常发生,因此程序正常运行,并输出Finally。7下列代码中给出正确的在方法体内抛出异常的是( B )。Anew throw Exception(" ");Bthrow new Exception(" ");Cthrows IOException();Dthrows IOException;【解析】在方法体内抛出异常时只能使用throw,而不能使用throws,另外,“new Exception(" ")”是创建一个异常,因此B是正确的。8下列描述了Java语言通过面相对象的方法进行异常处理的好处,请选出不在这些好处范围之内的一项( C )A把各种不同的异常事件进行分类,体现了良好的继承性B把错误处理代码从常规代码中分离出来C可以利用异常处理机制代替传统的控制流程D这种机制对具有动态运行特性的复杂程序提供了强有力的支持【解析】异常处理机制不能代替传统的流程控制。二、编程题1编写一个系统自动抛出的、系统自行处理的数组大小为负数的程序。【编程分析】当编写的程序中没有处理异常的语句时,系统会自动抛出异常,并自行进行处理。【参考程序】public class X7_3_1 public static void main(String args)int a = new int-5;for(int i=0; i<a.length; i+)ai = 10 + i;【运行结果】Exception in thread "main" java.lang.NegativeArraySizeException at X7_3_1.main(X7_3_1.java:3)2编写一个由throw抛出的、系统自行处理的数组下标越界的程序。【编程分析】当由throw抛出异常后,如果程序本身不进行异常处理,Java系统将采用默认的处理方式进行处理。【参考程序】import java.io.*;public class X7_3_2 public static void main(String args)throws IOException InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr);int a = new int5;int n = Integer.parseInt(br.readLine();if(n>5) / 当输入的n值大于5时将由throw抛出异常throw new ArrayIndexOutOfBoundsException();System.out.println("程序继续执行");for(int i=0; i<n; i+)ai = 10 + i;System.out.print(ai+"t");System.out.println();【运行结果】8Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at C1.main(C1.java:9)3编写一个系统自动抛出的、由trycatch捕捉处理的分母为0以及数组下标越界的程序。【编程分析】当在try语句块中出现分母为0的情况时,如果在catch参数中有ArithmeticException对象,则就能捕捉到该异常并进行处理;同样,当在try语句块中出现分母为数组下标越界的情况时,如果在catch参数中有ArrayIndexOutOfBoundsException对象,则就能捕捉到该异常并进行处理。【参考程序】import java.io.*;public class X7_3_3 public static void main(String args) throws IOExceptionInputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);System.out.println("请输入两个整数:");int a = Integer.parseInt( br.readLine();int b = Integer.parseInt( br.readLine();try/ 当输入的b为0时,就会出现算术异常System.out.println(a/b);catch(ArithmeticException e)/ 捕捉算术异常并进行处理System.out.println("出现被0除的情况!");int c =new int4, sum = 0;try/ 当出现数组下标越界时就会抛出异常for(int i = 0; i<5; i+) sum += ci;System.out.println( " sum = " + sum);catch(ArrayIndexOutOfBoundsException e)/ 捕捉数组下标越界异常并处理System.out.println("数组下标越界!");【运行结果】请输入两个整数:200出现被0除的情况!数组下标越界!4编写一个由throw抛出的、由trycatch捕捉处理的分母为0以及数组下标越界的程序。【编程分析】当在程序出现异常之前利用throw语句来抛出异常,可以做到防患于未然,提前进行异常处理,将由被动处理异常转变为主动防止异常发生。【参考程序】import java.io.*;public class X7_3_4 public static void main(String args) throws IOExceptionInputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);System.out.println("请输入两个整数:");int a = Integer.parseInt( br.readLine();int b = Integer.parseInt( br.readLine();tryif(b=0)throw new ArithmeticException("抛出算术异常");System.out.println(a/b);catch(ArithmeticException e)e.printStackTrace();System.out.println("出现被0除的情况!");int c =1, 2, 3, 4, sum = 0;tryfor(int i = 0; i<5; i+) if(i >= 4) throw new ArrayIndexOutOfBoundsException("抛出数组下标越界异常");sum += ci;System.out.println( " sum = " + sum);catch(ArrayIndexOutOfBoundsException e)e.printStackTrace();System.out.println("数组下标越界!");5自定义两个异常类NumberTooBigException和NumberTooSmallException,在其中定义各自的构造方法,分别打印输出“发生数字太大异常”和“发生数字太小异常”。然后在主类中定义一个带throws的方法numberException(int x),当x>100时通过throw抛出NumberTooBigException异常,当x<0时通过throw抛出NumberTooSmallException异常;最后在main()方法中调用该方法,实现从键盘中输入一个整数,如果输入的是负数,引发NumberTooSmallException异常,如果输入的数大于100,引发。NumberTooBigException异常,否则输出“没有发生异常”。【编程分析】本题主要考察自定义异常的方法。第一步:定义异常类NumberTooBigExceptionclass NumberTooBigException extends ExceptionNumberTooBigException()super("发生数字太大异常 ");第二步:定义异常类NumberTooSmallExceptionclass NumberTooSmallException extends ExceptionNumberTooSmallException()super("发生数字太小异常");第三步:在主类X7_3_5中定义numberException()方法。public static void numberException(int x) throws NumberTooBigException, NumberTooSmallExceptionif(x>100)throw new NumberTooBigException();else if (x<0)throw new NumberTooSmallException();elseSystem.out.println("没有异常发生");第四步:在main()方法中调用numberException()方法并捕捉和处理由此方法引起的异常。【参考程序】import java.io.*;public class X7_3_5 public static void main(String args) throws IOExceptionInputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);System.out.print("请输入一个整数:");int a = Integer.parseInt( br.readLine();trynumberException(a);catch(NumberTooBigException e)e.printStackTrace();catch(NumberTooSmallException e)e.printStackTrace();public static void numberException(int x) throws NumberTooBigException, NumberTooSmallExceptionif(x>100)throw new NumberTooBigException();else if (x<0)throw new NumberTooSmallException();elseSystem.out.println("没有异常发生");class NumberTooBigException extends ExceptionNumberTooBigException()super("发生数字太大异常 ");class NumberTooSmallException extends ExceptionNumberTooSmallException()super("发生数字太小异常");实验9一、选择题1下列说法中错误的一项是( B )。A构件是一个可视化的能与用户在屏幕上交互的对象B构件能够独立显示出来C构件必须放在某个容器中才能正确显示D一个按钮可以是一个构件【解析】构件不能独立显示,它必须放在某个容器中才能正确显示。2进行Java基本GUI设计需要用到的包是( C )。Ajava.ioBjava.sqlCjava.awtDjava.rmi【解析】进行Java基本GUI设计需要用到的包是java.awt和javax.swing3Container是下列哪一个类的子类( D )?AGraphicsBWindowCAppletDComponent【解析】Container类是由Component类派生的。4java.awt.Frame的父类是( B )。Ajava.util.WindowBjava.awt WindowCjava.awt PanelDjava.awt.ScrollPane【解析】java.awt.Frame的父类java.awt Window。5下列哪个方法可以将MenuBar加入Frame中( D )?AsetMenu()BaddMenuBar()Cadd()DsetMenuBar()【解析】可以将MenuBar加入Frame中的方法是setMenuBar()。6下列叙述中,错误的一项是( D )。A采用GridLayout布局,容器中的每个构件平均分配容器空间B采用GridLayout布局,容器中的每个构件形成一个网络状的布局C采用GridLayout布局,容器中的构件按照从左到右、从上到下的顺序排列D采用GridLayout布局,容器大小改变时,每个构件不再平均分配容器空间【解析】采用GridLayout布局,容器大小改变时,每个构件平均分配容器空间。7当单击鼠标或拖动鼠标时,触发的事件是( D )。AKeyEventBActionEventCItemEventDMouseEvent【解析】对鼠标操作,触发的事件是MouseEvent事件。8下列哪一项不属于Swing的顶层组件( C )?AJAppletBJDialogCJTreeDJframe【解析】JTree只有在容器中才能显示,它不属于swing的顶层组件。9下列说法中错误的一项是( D )。A在实际编程中,一般使用的是Component类的子类B在实际编程中,一般使用的是Container类的子类CContainer类是Component类的子类D容器中可以放置构件,但是不能够放置容器【解析】容器中既可以放置构件,也可以放置容器。10下列哪一项不属于AWT布局管理器( D )?AGridLayoutBCardLayoutCBorderLayoutDBoxLayout【解析】BoxLayout属于swing布局管理器,不属于AWT布局管理器。11下列说法中错误的一项是( A )。AMouseAdapter是鼠标运动适配器 BWindowAdapter是窗口适配器CContainerAdapter是容器适配器DKeyAdapter是键盘适配器【解析】MouseAdapter是鼠标适配器,而MouseMotionAdapte才是鼠标运动适配器。12布局管理器可以管理构件的哪个属性( A )?A大小B颜色C名称D字体【解析】布局管理器可以管理构件的位置和大小,而不能管理构件的其他属性。13编写AWT图形用户界面的时候,一定要import的语句是( B )。Aimport java.awt; Bimport java.awt.*;Cimport javax.awtDimport javax.swing.*;【解析】“import java.awt.*;”语句的含义是加载awt包中的所有类,而其他都不是。14在类中若要处理ActionEvent事件,则该类需要实现的接口是( B )。ARunnableBActionListenerCSerializableDEvent【解析】处理ActionEvent事件的类需要实现的接口是ActionListener,它其中包含了actionPerformed()方法。15下列不属于java.awt包中的基本概念的一项是( C )。A容器B构件C线程D布局管理器【解析】线程不属于java.awt包中的基本概念的一项,其他三个都是。16下列关于AWT构件的说法中错误的一项是( D )。AFrame是顶级窗口,它无法直接监听键盘输入事件B对话框需要依赖于其他窗口而存在C菜单只能被添加到菜单栏中D可以将菜单添加到任意容器的某处【解析】菜单只能添加到Applet、Frame等容器中,不能添加到任意容器的某处。17JPanel的默认布局管理器是( C )。ABorderLayoutBGridLayoutCFlowLayoutDCardLayout【解析】Panel、JPanel和Applet的默认布局管理器都是FlowLayout。18下列说法中错误的是( B )。A在Windows系统下,Frame窗口是有标题、边框的BFrame的对象实例化后,没有大小,但是可以看到C通过调用Frame的setSize()方法来设定窗口的大小D通过调用Frame的setVisible(true)方法来设置窗口为可见【解析】Frame的对象实例化后,没有大小,也不能看到,只有通过调用Frame的setSize()和setVisible(true)方法才能设定窗口的大小和可见性。19下列说法中错误的是( D )。A同一个对象可以监听一个事件源上多个不同的事件B一个类可以实现多个监听器接口C一个类中可以同时出现事件源和事件处理者D一个类只能实现一个监听器接口【解析】一个类可以实现多个监听器接口,从而实现对多个事件的监听。20下列选项中不属于容器的一项是( )。AWindowBPanelCFlowLayoutDScrollPane【解析】FlowLayout类属于布局管理器,而不属于容器。二、编程题1创建一个Frame类型窗口,在窗口中添加2个不同颜色的Panel面板,每个面板中添加2个按钮构件。【编程分析】本程序主要考察窗口、面板以及按钮的创建及布局问题。第一步:首先定义一个主类,让该类继承Frame类。第二步:定义该类的数据成员,包括两个Panel对象,一个长度为4的Button对象数组。第三步:创建类的工作方法,在方法中创建各个对象、设置对象属性、布局整个界面、设置窗口大小并显示界面。第四步:在类的main()方法中创建本类对象,从而显示整个窗口界面。【参考程序】import java.io.*;import java.awt.*;public class X10_3_1 extends Frame Panel pn1,pn2;/ 定义面板 Button bt = new Button4; / 定义按钮数组 public static void main(String args)throws IOException new X10_3_1 ();public X10_3_1 ()pn1 = new Panel();/ 创建面板对象pn2 = new Panel();pn1.setBackground(Color.yellow);/ 设置面板背景颜色pn2.setBackground(Color.green);for(int i=0; i<4; i+)/ 创建按钮对象bti = new Button("Button"+(i+1);pn1.add(bt0);/ 向面板中添加按钮,面板的默认布局为FlowLayoutpn1.add(bt1);pn2.add(bt2);pn2.add(bt3);add(pn1,BorderLayout.NORTH);/ 向窗口添加面板,窗口默认布局为BorderLayoutadd(pn2,BorderLayout.SOUTH);this.setSize(300,200);/ 设置窗口大小this.setVisible(true);/ 显示窗口【运行结果】2创建一个Frame类型窗口,采用GridLayout布局,在窗口中创建一个计算器的界面。【编程分析】本程序主要考察布局管理问题。第一步:创建一个主类,其中定义两个面板,一个文本框,一个二维按钮数组,一个二维字符串数组。一个构造方法、一个main()方法。第二步:在构造方法中创建控件,实现布局。【参考程序】import java.io.*;import java.awt.*;public class X10_3_2 extends Frame Panel pn1,pn2;/ 定义两个面板 TextField tf;/ 定义文本框控件 Button bt = new Button46;/ 定义按钮对象二维数组 String str = "MC","7","8","9","/","sqrt","MR","4"