关于使用多个 catch 语句捕获多个异常问题。
今天看到理工大学的JAVA试题:
当使用多个 catch 语句捕获多个异常时, Java 规定捕获 Exception 的 catch 语句必须排在最后,如下所示:
try { …… }
catch(ClassCastException ex){ …… }
catch(NumberFormatException ex){ …… }
catch(Exception ex){ …… } // 此句必须放在最后!
为什么会有这个限制?
[解决办法]
因为Exception这个是那几个异常的 老爹!
那几个异常都是他的娃,Exception放在最前面后面娃儿的还有机会吗?
[解决办法]
根据继承而来的,同1L。
[解决办法]
就像一个球从高楼上面往下扔,如果把catch Exception比作手套的话,Exception因为是父类所以他的手套的最大的,IOException要比FileNotFound要大....这样之后如果大的手套放在小的手套上一层那下面的小手套就接不到球了,所以要让范围小的异常在上面,父类在下面,再能逐层捕获,不然所有一场都在第一层捕获,那下面的就没有意义了!
[解决办法]
Exception是基类 头一次都截获了 底下就没的玩了
[解决办法]
因为在用catch捕获异常的时候,会根据catch(****)中的内容逐个执行,当发现到try中产生的异常和catch内的异常相同时候就会停止。否则会继续向下执行,而Java.lang.Exception是所有异常类的父类。
所以你把它写在最上面,。(这里面体现了多态的特性)。
那么下面再写任何子类的异常是没有意义的,因为是不会被执行的。
好像一般的unchecked 也就是RunTimeException是不允许把Exception写在最上面的。好像写了就会直接出现编译错误,是无法编译通过的。
[解决办法]