一、填空题
__异常处理__机制是一种非常有用的辅助性程序设计方法。采用这种方法可以使得在程序设计时将程序的正常流程与错误处理分开,有利于代码的编写和维护。
在Java异常处理中可以使用多个catch子句,此时包含异常类的父类Exception的catch子句的位置应该是在__最后__。
异常处理中finally块可确保无论是否发生异常,该块中代码总能被执行。finally块不执行的唯一情况是在异常处理代码中执行__System.exit()__语句退出Java虚拟机。
异常是由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等,可分为两类:Checked异常和__运行时异常___。
在Java中对于程序可能出现的检查时异常,要么用try…catch语句捕获并处理它,要么使用_throws__语句抛出它,由上一级调用者来处理。
Java异常处理中,如果一个方法中出现了多个Checked异常,可以在方法声明中使用关键字__thorws_声明抛出,各异常类型之间使用逗号分隔。
二、选择题
1.
以下关于异常的代码的执行结果是( C)。(选择一项)
public class Test {
public static void main(String args[]) {
try {
System.out.println("try");
return;
} catch(Exception e){
System.out.println("catch");
}finally {
System.out.println("finally");
}
}
}
A.
try
catch
finally
B.
catch
finally
C.
try
finally
D.
Try
2.
在异常处理中,如释放资源、关闭文件等由(C)来完成。(选择一项)
A
try子句
B.
catch子句
C.
finally子句
D.
throw子句
3.
编译并运行如下Java程序,将输出(D)。(选择一项)
public static void main(String[] args) {
try {
int num1 = 2; int num2 = 0;
int result = num1 / num2;
System.out.println(result);
throw new NumberFormatException( );
} catch (ArrayIndexOutOfBoundsException e) {
System.out.print("1");
} catch (NumberFormatException e) {
System.out.print("2");
} catch (Exception e) {
System.out.print("3");
} finally {
System.out.print("4");
}
System.out.print("5");
}
A
134
B.
2345
C.
1345
D.
345
5.
下面选项中有关Java异常处理模型的说法错误的是(AD)。(选择二项)
A
一个try块只能有一条catch语句
B.
一个try块中可以不使用catch语句
C.
catch块不能单独使用,必须始终与try块在一起
D.
finally块可以单独使用,不是必须与try块在一起
6.
下面选项中属于运行时异常的是(BC)。(选择二项)
A
Exception和SexException
B.
NullPointerException和InputMismatchException
C.
ArithmeticException和ArrayIndexOutOfBoundsException
D.
ClassNotFoundException和ClassCastException
7.
阅读如下Java代码,在控制台输入"-1",执行结果是(B)。(选择一项)
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入数字:");
try {
int num = input.nextInt();
if (num < 1 || num > 4) {
throw new Exception("必须在1-4之间!");
}
} catch (InputMismatchException e) {
System.out.println("InputMismatchException");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
A
输出:InputMismatchException
B.
输出:必须在1-4之间!
C.
什么也没输出
D.
编译错误
三、简答题
1.Error和Exception的区别
2.Checked异常和Runtime异常的区别。
3.Java异常处理中,关键字try、catch、finally、throw、throws分别代表什么含义?
4.throws和throw的区别
四、编码题
1.编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。
要求:使用自定义异常实现
1 /**
2 *3 * 分数范围异常类型4 *5 *@authorAdministrator6 *7 *8 *9 */
10 public class ScoreScopeException extendsRuntimeException11 {12 publicScoreScopeException()13 {14 super();15 }16 publicScoreScopeException(String message)17 {18 super(message);19 }20 }21 importjava.util.Scanner;22 public classTest23 {24 public static voidmain(String[] args)25 {26 Scanner scanner = newScanner(System.in);27 try
28 {29 System.out.print("请输入分数:");30 int score =scanner.nextInt();31 if (score < 0 || score > 100)32 {33 throw new ScoreScopeException("分数必须在0-100之间");34 }35 System.out.println("分数为:" +score);36 } catch(ScoreScopeException e)37 {38 System.out.println(e.getMessage());39 e.printStackTrace();40 }41 }42 }
2.写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
1 public classTest2 {3 public static voidmain(String[] args)4 {5 //输入三条边
6 System.out.println("请输入三条边长");7 Scanner reader = newScanner(System.in);8 int a =reader.nextInt();9 int b =reader.nextInt();10 int c =reader.nextInt();11 //判断是否是三角形
12 isTriangle(a, b, c);13 }14 private static void isTriangle(int a, int b, intc)15 {16 //三条边都不能是负数
17 if (a < 0 || b < 0 || c < 0)18 {19 throw new IllegalArgumentException("三条边不能是负数");20 }21 //判断是否构成三角形
22 if (a + b > c && a + c > b && b + c >a)23 {24 System.out.println("三角形的边长分别为" + "a=" + a + " "
25 + "b=" + b + " " + "c=" + " " +c);26 } else
27 {28 throw new IllegalArgumentException(a + "," + b + "," +c29 + "不能构成三角形!");30 }31 }32 }
五、可选题
1.编写一个计算N个整数平均值的程序。程序应该提示用户输入N的值,如何必须输入所有N个数。如果用户输入的值是一个负数,则应该抛出一个异常并捕获,提示“N必须是正数或者0”。并提示用户再次输入该数
1 public classTest2 {3 public static voidmain(String[] args)4 {5 Scanner input = newScanner(System.in);6 System.out.println("要计算几个整数的平均值呢:");7 int n =input.nextInt();8 //使用sum求出用户输入的数的总和;
9 int sum = 0;10 int num = 0;11 //使用循环提醒用户输入
12 for (int i = 0; i < n; i++)13 {14 System.out.println("请输入第" + (i + 1) + "个数");15 try
16 {17 num =input.nextInt();18 if (num < 0)19 {20 //i<0抛出异常
21 throw new Exception("N必须是正数或者0");22 }23 sum +=num;24 } catch(Exception e)25 {26 //使用递归,如果出现异常继续输入
27 System.out.println(e.getMessage());28 i--;29 }30 }31 System.out.println("一共" + n + "个数," + "和为:" +sum32 + ",平均值为:" + sum /n);33 }34 }