學習異常處理-自定義異常類與finally無法修改retrun,throw等終止語句的內容
阿新 • • 發佈:2022-05-18
class MyException extends RuntimeException{ public MyException(){} public MyException(String message){super(message);} } public class 異常處理 { public static void main(String[] args) { /* 五 finally程式碼塊 起因: 垃圾回收機制不會回收任何物理資源,只會回收堆記憶體中的物件所佔的記憶體 注意: 1 正常情況下finally語句永遠可以得到執行,即使try塊或catch塊執行return或throw等方法退出的語句,現在知道為什麼它叫finally了吧 (System.exit(1)執行導致退出虛擬機器除外,當然沒人這麼幹,還是記住那句話,正常情況下finally語句永遠可以得到執行) 2 不要在finally塊中使用或throw等導致方法退出的語句.(因為這將導致try塊或catch塊的return,throw語句失效.) 3 finally無法修改try或catch塊中return返回的值,即使修改的return中變數的值也如此(當然也無法修改throw) 因為return返回的值已經被執行了,產生了一個結果x,此時才執行finally語句,最後返回x結果. (執行finally語句前return語句的返回值結果已經產生.) */ //下面語句輸出說明finally無法修改該return返回值 System.out.println(testReturn());//吃飯了1111111111111111111111 try { System.out.println(testThrow()); } catch (MyException e) { //下面語句輸出說明finally無法修改該throw語句內容 System.out.println(e.getMessage());//吃飯了2222222222222222222 } } public static String test(String s) {return s;} public static String testReturn() { String message = "吃飯了"; try { return test(message) + "1111111111111111111111"; } finally { message = "good";//修改message變數 } } public static String testThrow() { String message = "吃飯了"; try { throw new MyException(message + "2222222222222222222"); } finally { message = "good";//修改message變數 } } }
執行結果如下:
吃飯了1111111111111111111111
吃飯了2222222222222222222