Java基础 四 异常

 

 

 

 

 

类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA

有如下代码片断:

try {
	throw new ExampleB("b")
} catch(ExampleA e){
	System.out.println("ExampleA");
} catch(Exception e){
	System.out.println("Exception");
}

请问执行此段代码的输出是什么?

输出:ExampleA。(根据里氏代换原则[能使用父类型的地方一定能使用子类型],抓取 ExampleA 类型异常的 catch 块能够抓住 try 块中抛出的 ExampleB 类型的异常)

 

.  getCustomerInfo() 方法如下,try 中可以捕获三种类型的异常,如果在该方法运行中产生了一个 IOException,将会输出什么结果?   ( A )

public void getCustomerInfo() {
    try {
        // do something that may cause an Exception
    } catch (java.io.FileNotFoundException ex) {
        System.out.print("FileNotFoundException!");
    } catch (java.io.IOException ex) {
        System.out.print("IOException!");
    } catch (java.lang.Exception ex) {
        System.out.print("Exception!");
    }
}

 

A IOException

B IOException!Exception!

C FileNotFoundException!IOException!

D FileNotFoundException!IOException!Exception!

解析:考察多个catch语句块的执行顺序。当用多个catch语句时,catch语句块在次序上有先后之分。从最前面的catch语句块依次先后进行异常类型匹配,

这样如果父异常在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得匹配的机会,也即子异常类型所在的catch语句块将是不可到达的语句。所以,一般将父类异常类即Exception老大放在catch语句块的最后一个。

 

posted @ 2020-10-20 20:36  tzmok  阅读(121)  评论(0编辑  收藏  举报