单选题
(1)给定如下所示的JAVA代码,则运行String s = null; s.concat("abc");时会产生(B)。
A.ArithmeticException B.NullPointerException
C.IOException D.ClassNotFoundException
(2)下列哪种异常是检查型异常,需要在编写程序时声明(C)。
A.NullPointerException B.ClassCastException
C.FileNotFoundException D.IndexOutOfBoundsException
(3)对于已经被定义过可能抛出异常的语句,在编程时(A)。
A.必须使用try/catch语句处理异常,或用throws将其抛出
B.如果程序错误,必须使用try/catch语句处理异常
C.可以置之不理
D.只能使用try/catch语句处理
(4)下面代码运行结果是(B)。
public class Demo{
public int add(int a,int b){
try{
return a+b;
}catch(Exception e){
System.out.println(“catch 语句块”);
}finally{
System.out.println(“finally 语句块”);
}
return 0;
}
public static void main(String[] args){
Demo demo = new Demo();
System.out.println(“和是:”+demo.add(9,34));
}
}
A.编译异常 B.finally语句块 和是:43
C.和是:43 finally语句块 D.catch语句块 和是:43
(5)以下程序运行结果是(D)。
public class Test {
public int div(int a, int b) {
try{
return a / b;
}catch(Exception e){
System.out.println(“Exception”);
}catch(NullPointerException e){
System.out.println(“ArithmeticException”);
}catch(ArithmeticException e) {
System.out.println(“ArithmeticException”);
}finally {
System.out.println(“finally”);
}
return 0;
}
public static void main(String[] args) {
Test demo = new Test();
System.out.println(“商是:” + demo.div(9, 0));
}
}
A.Exception finally商是:0 B.ArithmeticException finally商是:0
C.finally商是:0 D.编译报错
多选题
(1)以下说法正确的是(ACD)。
A.Throwable是Error的父类 B.Throwable是Exception的子类
C.Throwable是Object的子类 D.Throwable实现了Serialiable接口
填空题
(1)所有的异常都是从 Throwable 继承而来的,是所有异常的共同祖先。
简答题
(1)写出5种常见的运行时异常。
空指针,数组越界,算术异常,类转换,数组存储异常。
(2)运行时异常和编译时异常的区别。
编译时异常继承自Exception,编译期间会主动检查这种异常,发现报错后要求我们处理。
运行时异常继承自RuntimeException编译期间,不会检查这种异常,也不要处理,但是运行期间,可能抛出这种类型的异常。
(3)Error和Exception区别。
error表示错误情况,0.5是程序出现了比较严重的问题,并且程序自身无法进行处理。
exception表示异常情况,大多数是可以通过特定的方式进行处理,并且处理完后,程序还可以继续往下正常运行。
(4)Java程序中通常有哪几种方式处理异常,各有什么特点。
在Java应用程序中,异常处理机制为:抛出异常,捕捉异常。
抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
捕捉异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
编程题
(1)编写应用程序,从命令行输入两个小数参数,求它们的商。
描述:要求程序中捕获NumberFormatException异常和ArithmeticException异常。
class MyMath {
public int div(String x, String y) throws NumberFormatException,
ArithmeticException {
//出现异常要交给被调用处出理
int result = 0;
try {
int numa = Integer.parseInt(x) ;
int numb = Integer.parseInt(y) ;
result = numa / numb; //除法计算
} catch (Exception e) {
throw e; }
return result;
}
}
public class TestDemo {
public static void main(String args[]) {
if (args.length != 2) {
System.out.println("程序运行出错!");
System.exit(1) ; //程序退出
}
try {
MyMath mm = new MyMath() ;
System.out.println(mm.div(args[0], args[1])); //被调用处处理异常
} catch (Exception e) {
e.printStackTrace();
}
}
}