日期:2014-05-20  浏览次数:20690 次

关于使用多个 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写在最上面的。好像写了就会直接出现编译错误,是无法编译通过的。
------解决方案--------------------
探讨
因为在用catch捕获异常的时候,会根据catch(****)中的内容逐个执行,当发现到try中产生的异常和catch内的异常相同时候就会停止。否则会继续向下执行,而Java.lang.Exception是所有异常类的父类。
所以你把它写在最上面,。(这里面体现了多态的特性)。

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



好像一般的unchecked 也就是……

------解决方案--------------------
它会先捕获第一个catch,再捕获第二个,也就是从里到外,这样的话,你把Exception ex放在最里面,那么,只要出错就会捕获这个,它可以捕获所以的错误,那么,后面的那几个自己定义的catch就永远也执行不到
------解决方案--------------------
探讨
因为Exception这个是那几个异常的 老爹!
那几个异常都是他的娃,Exception放在最前面后面娃儿的还有机会吗?

------解决方案--------------------
因为Exception这个是那几个异常的 老爹!
那几个异常都是他的娃,Exception放在最前面后面娃儿的还有机会吗?
------解决方案--------------------
java中,Throwable是所有的Exception和Error的基类,而就异常来说,Exception则是所有异常的基类,也就是Exception能捕获所有类型的异常,所以在捕获时,当然是从你能捕获的最精确的异常开始啦,并且根据异常的类型进行相应的处理,依次是更大范围的异常,所以当然是把Exception放在最后拉。
------解决方案--------------------
Exception是所有异常类的基类,其他所有异常类都是其子类,java捕捉异常的顺序是从最里层的开始逐渐往最外层的搜索异常匹配(不知道能否这样说,意思是没错啦),如果把Exception放到最前面,则不论抛出什么异常,Exception都能捕获到,也就是说,不管你抛出的异常类型是什么,都会被Exception这个语句捕获到,其他捕获语句都没用!
嘿嘿,其实,我是分不够了,来混分的,可怜可怜偶吧!