\”是创建一个异常,因此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
【运行结果】
Exception in thread \ 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 int[5]; int n = Integer.parseInt(br.readLine()); if(n>5) // 当输入的n值大于5时将由throw抛出异常 throw new ArrayIndexOutOfBoundsException(); System.out.println(\程序继续执行\ for(int i=0; i System.out.println(); } } 【运行结果】 8 Exception in thread \ at C1.main(C1.java:9) 3.编写一个系统自动抛出的、由try-catch捕捉处理的分母为0以及数组下标越界的程序。 【编程分析】 当在try语句块中出现分母为0的情况时,如果在catch参数中有ArithmeticException对象,则就能捕捉到该异常并进行处理;同样,当在try语句块中出现分母为数组下标越界的情况时,如果在catch参数中有ArrayIndexOutOfBoundsException对象,则就能捕捉到该异常并进行处理。 【参考程序】 import java.io.*; public class X7_3_3 { public static void main(String args[]) throws IOException{ InputStreamReader 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 int[4], sum = 0; try{ // 当出现数组下标越界时就会抛出异常 for(int i = 0; i<5; i++) sum += c[i]; System.out.println( \ } catch(ArrayIndexOutOfBoundsException e){// 捕捉数组下标越界异常并处理 System.out.println(\数组下标越界!\ } } } 【运行结果】 请输入两个整数: 20 0 出现被0除的情况! 数组下标越界! 4.编写一个由throw抛出的、由try-catch捕捉处理的分母为0以及数组下标越界的程序。 【编程分析】 当在程序出现异常之前利用throw语句来抛出异常,可以做到防患于未然,提前进行异常处理,将由被动处理异常转变为主动防止异常发生。 【参考程序】 import java.io.*; public class X7_3_4 { public static void main(String args[]) throws IOException{ InputStreamReader 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{ if(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; try{ for(int i = 0; i<5; i++) { if(i >= 4) throw new ArrayIndexOutOfBoundsException(\抛出数组下标越界 sum += c[i]; System.out.println( \ } } 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异常,否则输出“没有发生异常”。 【编程分析】本题主要考察自定义异常的方法。 第一步:定义异常类NumberTooBigException class NumberTooBigException extends Exception{ NumberTooBigException(){ super(\发生数字太大异常 \ } } 第二步:定义异常类NumberTooSmallException class NumberTooSmallException extends Exception{ NumberTooSmallException(){ super(\发生数字太小异常\ } } 第三步:在主类X7_3_5中定义numberException()方法。 public static void numberException(int x) throws NumberTooBigException, NumberTooSmallException{ if(x>100) throw new NumberTooBigException(); else if (x<0) throw new NumberTooSmallException(); else System.out.println(\没有异常发生\; } 第四步:在main()方法中调用numberException()方法并捕捉和处理由此方法引起的异常。 【参考程序】 import java.io.*; public class X7_3_5 { public static void main(String args[]) throws IOException{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.print(\请输入一个整数:\ int a = Integer.parseInt( br.readLine()); try{ numberException(a); }catch(NumberTooBigException e){ e.printStackTrace(); }catch(NumberTooSmallException e){ e.printStackTrace(); } } public static void numberException(int x) throws NumberTooBigException, NumberTooSmallException{ if(x>100) throw new NumberTooBigException(); else if (x<0) throw new NumberTooSmallException(); else System.out.println(\没有异常发生\; } } class NumberTooBigException extends Exception{ NumberTooBigException(){ super(\发生数字太大异常 \ } } class NumberTooSmallException extends Exception{ NumberTooSmallException(){ } 实验9 一、选择题 1.下列说法中错误的一项是( B )。 A.构件是一个可视化的能与用户在屏幕上交互的对象 B.构件能够独立显示出来 C.构件必须放在某个容器中才能正确显示 D.一个按钮可以是一个构件 【解析】构件不能独立显示,它必须放在某个容器中才能正确显示。 2.进行Java基本GUI设计需要用到的包是( C )。 A.java.io B.java.sql C.java.awt D.java.rmi 【解析】进行Java基本GUI设计需要用到的包是java.awt和javax.swing 3.Container是下列哪一个类的子类( D )? A.Graphics B.Window C.Applet D.Component 【解析】Container类是由Component类派生的。 4.java.awt.Frame的父类是( B )。 A.java.util.Window B.java.awt Window C.java.awt Panel D.java.awt.ScrollPane 【解析】java.awt.Frame的父类java.awt Window。 5.下列哪个方法可以将MenuBar加入Frame中( D )? A.setMenu() B.addMenuBar() C.add() D.setMenuBar() 【解析】可以将MenuBar加入Frame中的方法是setMenuBar()。 6.下列叙述中,错误的一项是( D )。 A.采用GridLayout布局,容器中的每个构件平均分配容器空间 B.采用GridLayout布局,容器中的每个构件形成一个网络状的布局 } super(\发生数字太小异常\