請問test2() throw 的RuntimeException 為什么不需要test2() throws Exception 聲明拋出異常?
請問test2() throw 的RuntimeException 為什么不需要test2() throws Exception 聲明拋出異常?
public void test1() throws DrunkException{
????throw new DrunkException("喝車別開酒!");
}
public void test2(){
????try {
????????test1();
????} catch (DrunkException e) {
????// TODO Auto-generated catch block
????RuntimeException newExc =?
????????new RuntimeException(e);
????????// newExc.initCause(e);
????????throw newExc;
????}
}
2015-01-07
哦,不好意思,沒看到是RuntimeException,該異常屬于Java中的特例,因為編譯器沒有在這個問題上對異常說明進行強制檢查,RuntimeException類型的異常也許會穿越所有的執行路徑達到main方法中,而不會被捕獲。對于該異常類,編譯器不需要異常說明,其輸出會直接報告給System.err,如果說RuntimeException在到達main方法之前沒有被捕獲,那么在退出當前程序的時候,會直接調用printStackTrace()方法。
你可以把這個異常理解為編程錯誤,所以不用拋出也是可以的
2015-01-07
參看1-1的視頻,我想是因為RuntimeException 屬于unchecked exception,?對于RuntimeException,java編譯器不要求把它捕獲或者拋出
2015-01-07
test2不是有try-catch語句塊嗎?這個語句塊就是捕獲異常使用的,所以當有這個語句塊的時候就不用拋出異常了,你可以把test1和test2對比一下,test1中是直接拋出的異常沒有try-catch的使用