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){
45
e.printStackTrace(); System.out.println(\数组下标越界!\ } } }
【运行结果】 请输入两个整数:
10 0 java.lang.ArithmeticException: 抛出算术异常 at X7_3_4.main(C9_4.java:11) 出现被0除的情况! sum = 1 sum = 3 sum = 6 sum = 10
java.lang.ArrayIndexOutOfBoundsException: 抛出数组下标越界异常 at X7_3_4.main(X7_3_4.java:22) 数组下标越界!
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();
46
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(){ super(\发生数字太小异常\ } }
【运行结果】
47
? 当输入的数值大于100时,运行结果为: 请输入一个整数:120
NumberTooBigException: 发生数字太大异常
at X7_3_5.numberException(X7_3_5.java:18) at X7_3_5.main(X7_3_5.java:9) ? 当输入的数值小于0时,运行结果为: 请输入一个整数:-10
NumberTooSmallException: 发生数字太小异常
at X7_3_5.numberException(X7_3_5.java:20) at X7_3_5.main(X7_3_5.java:9)
? 当输入的数值在0~100之间时,运行结果为: 请输入一个整数:25 没有异常发生
第8章
一、选择题
1.下列数据流中,属于输入流的一项是( B )。
A.从内存流向硬盘的数据流 B.从键盘流向内存的数据流 C.从键盘流向显示器的数据流 D.从网络流向显示器的数据流 【解析】输入流是指从外围设备流向主机(包括CPU和内存)的数据流。 2.Java语言提供处理不同类型流的类所在的包是( D )。
A.java.sql B.java.util C.java.net D.java.io 【解析】java.io 包是Java语言提供处理不同类型流的类所在的包。 3.不属于java.io包中的接口的是( C )。
A.DataInput B.DataOutput C.DataInputStream D.ObjectInput 【解析】DataInputStream是java.io包中的一个类,其他三个则是java.io包中的接口。 4.下列程序从标准输入设备读入一个字符,然后再输出到显示器,选择正确的一项填入―//x‖处,完成要求的功能( B )。
import java.io.*; public class X8_1_4 { public static void main(String[] args) { char ch; try{ //x System.out.println(ch); } catch(IOException e){ e.printStackTrace(); } } }
A.ch = System.in.read(); B.ch = (char)System.in.read(); C.ch = (char)System.in.readln(); D.ch = (int)System.in.read();
【解析】System.in.read()方法返回的是字符对应的Unicode码,即返回的类型是int型,而ch是char类型,因此必须把方法的返回值强制转换为char类型才能把它赋值给ch变量。另外,
48