关于使用多个 catch 语句捕获多个异常问题

今天看到理工大学的JAVA试题:

    当使用多个 catch 语句捕获多个异常时, Java 规定捕获 Exception 的 catch 语句必须排在最后,如下所示:

 

    try { …… }

    catch(ClassCastException ex){ …… }

    catch(NumberFormatException ex){ …… }

    catch(Exception ex){ …… }  // 此句必须放在最后!

 

    为什么会有这个限制?


因为Exception这个是那几个异常的 老爹!
那几个异常都是他的娃,Exception放在最前面后面娃儿的还有机会吗?


因为在用catch捕获异常的时候,会根据catch(****)中的内容逐个执行,当发现到try中产生的异常和catch内的异常相同时候就会停止。否则会继续向下执行,而Java.lang.Exception是所有异常类的父类。
所以你把它写在最上面,。(这里面体现了多态的特性)。

那么下面再写任何子类的异常是没有意义的,因为是不会被执行的。



好像一般的unchecked 也就是RunTimeException是不允许把Exception写在最上面的。好像写了就会直接出现编译错误,是无法编译通过的。


它会先捕获第一个catch,再捕获第二个,也就是从里到外,这样的话,你把Exception ex放在最里面,那么,只要出错就会捕获这个,它可以捕获所以的错误,那么,后面的那几个自己定义的catch就永远也执行不到


java中,Throwable是所有的Exception和Error的基类,而就异常来说,Exception则是所有异常的基类,也就是Exception能捕获所有类型的异常,所以在捕获时,当然是从你能捕获的最精确的异常开始啦,并且根据异常的类型进行相应的处理,依次是更大范围的异常,所以当然是把Exception放在最后拉。


Exception是所有异常类的基类,其他所有异常类都是其子类,java捕捉异常的顺序是从最里层的开始逐渐往最外层的搜索异常匹配(不知道能否这样说,意思是没错啦),如果把Exception放到最前面,则不论抛出什么异常,Exception都能捕获到,也就是说,不管你抛出的异常类型是什么,都会被Exception这个语句捕获到,其他捕获语句都没用!



你可能感兴趣的:(J2EE)