淺談java中異常拋出子女碼能否會持續履行。本站提示廣大學習愛好者:(淺談java中異常拋出子女碼能否會持續履行)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談java中異常拋出子女碼能否會持續履行正文
成績
明天碰到一個成績,鄙人面的代碼中,當拋出運轉時異常後,前面的代碼還會履行嗎,能否須要在異常前面加上return
語句呢?
public void add(int index, E element){ if(size >= elements.length) { throw new RuntimeException("次序表已滿,沒法添加"); //return; //須要嗎? } .... }
為了答復這個成績,我編寫了幾段代碼測試了一下,成果以下:
//代碼1 public static void test() throws Exception { throw new Exception("參數越界"); System.out.println("異常後"); //編譯毛病,「沒法拜訪的語句」 }
//代碼2 try{ throw new Exception("參數越界"); }catch(Exception e) { e.printStackTrace(); } System.out.println("異常後");//可以履行
//代碼3 if(true) { throw new Exception("參數越界"); } System.out.println("異常後"); //拋出異常,不會履行
總結:
若一段代碼前有異常拋出,而且這個異常沒有被捕捉,這段代碼將發生編譯時毛病「沒法拜訪的語句」。如代碼1
若一段代碼前有異常拋出,而且這個異常被try...catch
所捕捉,若此時catch
語句中沒有拋出新的異常,則這段代碼可以或許被履行,不然,同第1條。如代碼2
若在一個前提語句中拋出異常,則法式能被編譯,但前面的語句不會被履行。如代碼3
別的總結一下運轉時異常與非運轉時異常的差別:
運轉時異常是RuntimeException
類及其子類的異常,長短受檢異常,如NullPointerException
、IndexOutOfBoundsException
等。因為這類異常要末是體系異常,沒法處置,如收集成績;
要末是法式邏輯毛病,如空指針異常;JVM必需停滯運轉以糾正這類毛病,所以運轉時異常可以不停止處置(捕捉或向上拋出,固然也能夠處置),而由JVM自行處置。Java Runtime
會主動catch
到法式throw
的RuntimeException
,然後停滯線程,打印異常。
非運轉時異常是RuntimeException
之外的異常,類型上都屬於Exception
類及其子類,是受檢異常。非運轉時異常必需停止處置(捕捉或向上拋出),假如不處置,法式將湧現編譯毛病。普通情形下,API中寫了throws
的Exception
都不是RuntimeException
。
罕見運轉時異常:
罕見非運轉時異常:
好了,以上就是這篇文章的全體內容了,願望本文的內容對年夜家進修或許任務能帶來必定的贊助,假如有疑問年夜家可以留言交換。