1. 程式人生 > 其它 >學習異常處理-自定義異常類與finally無法修改retrun,throw等終止語句的內容

學習異常處理-自定義異常類與finally無法修改retrun,throw等終止語句的內容

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