問題描述:在專案中,經常碰到異常**獲,但卻疑惑該異常是否會被丟擲還是執行,為了弄清情況,這裡使用測試類測試了幾種自己常見在專案中異常捕獲的情況。
首先我們弄2個方法,分別為父方法,和子方法,且父方法和子方法都有try..catch的部分,**如下。
@test
public void father() catch (exception e)
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}
首先我們測試情況1:父方法沒出現錯誤且不在catch中丟擲執行異常異常,子方法出現錯誤且不在catch中丟擲執行時異常,**截圖和輸出結果如下:
@test
public void father() catch (exception e)
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}
結果如下:
此時,子方法catch的**和try..catch之外的**正常執行,try..catch部分異常之後的**不執行,父方法不受子方法影響,正常執行,且不捕獲異常。
情況2:父方法沒出現錯誤在catch中丟擲執行異常異常,子方法出現錯誤且不在catch中丟擲執行時異常,**截圖和輸出結果如下:
@test
public void father() catch (exception e)
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}
輸出結果如下:
此時輸出結果與情況1一致,證明情況1結論正確。
情況3:父方法沒出現錯誤在catch中丟擲執行異常異常,子方法出現錯誤且在catch中丟擲執行時異常,**截圖和輸出結果如下:
@test
public void father() catch (exception e)
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}
結果截圖如下:
此時子方法丟擲執行時異常,父方法catch到子方法的執行時異常,也報錯執行時異常,程式終止,此時子、父方法的catch之外的**都不執行。
情況4:父方法沒出現錯誤在catch中不丟擲執行異常異常,子方法出現錯誤且在catch中丟擲執行時異常,**截圖和輸出結果如下:
try catch (exception e)
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}
結果截圖如下:
此時,子方法try..catch之外的**不執行,父方法try..catch之外的**正常執行且父類正常輸出catch內的內容。
情況5:父方法在呼叫子方法前出現錯誤且在catch中不丟擲執行異常異常,子方法出現錯誤且在catch中丟擲執行時異常,**截圖和輸出結果如下:
@test
public void father() catch (exception e)
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}
此時輸出結果如下:
system.out.println("父方法catch之外的**執行");
}private void son() catch (exception e)
system.out.println("子方法catch之外的**執行");
}結果截圖如下:
此時,父方法發生異常後的**都沒執行,且try..catch之外的**也沒執行。
try..catch捕獲異常時,當方法捕獲到異常時會執行catch中的內容,當在catch中丟擲執行時異常時,則會終止該方法的繼續執行,沒有父方法捕獲異常時,程式終止。如果有父方法也捕獲了異常,則執行父方法catch中的內容,如果在父方法內也丟擲執行時異常,則程式終止,否則將正常執行catch之外的內容;如果該方法沒丟擲執行時異常,則繼續執行try..catch外部分的**,且如果存在父方法的話,則父方法不受影響也不捕獲該異常。
在實際使用中,我們也可以在子方法中使用throws的方法將在子方法中發生異常拋給父方法去處理,但此時父方法必須try..catch該子方法。
至於異常原理,這裡沒做過多的研究。。後續如果有深究再來補充。
java執行時異常和非執行時異常的區別
建議使用執行時異常和編譯時異常叫法,便於區分和理解 非執行時異常是什麼異常?很懵逼 編譯時異常 程式沒有通過編譯器的編譯,必須處理掉這個異常程式才能正常執行,比如檔案路徑找不到異常,類找不到異常,io異常,必須用try catch或是throwable處理掉才能編譯通過 可以理解為一種特殊的語法錯誤...
執行時異常
常見的幾種如下 nullpointerexception 空指標引用異常 classcastexception 型別強制轉換異常。illegalargumentexception 傳遞非法引數異常。arithmeticexception 算術運算異常 arraystoreexception 向陣列中...
JAVA常見的執行時異常
執行時異常在程式設計和編譯的時候,ide與編譯器均不會給出任何錯誤提示,但執行時出現就導致程式失敗。類似於程式語言中的dynamic type checking。arrayindexoutofbound ception 陣列越界 nullpointerexception 空指標 numberform...