異常-面試題之final,finally和finalize的區別,如果在finally之前有return

ZHOU_VIP發表於2018-09-05
package cn.itcast_07;

/*
 * 面試題:
 * 1:final,finally和finalize的區別
 * final:最終的意思,可以修飾類,成員變數,成員方法
 *         修飾類,類不能被繼承
 *         修飾變數,變數是常量
 *         修飾方法,方法不能被重寫
 * finally:是異常處理的一部分,用於釋放資源。
 *         一般來說,程式碼肯定會執行,特殊情況:在執行到finally之前jvm退出了
 * finalize:是Object類的一個方法,用於垃圾回收
 * 
 * 2:如果catch裡面有return語句,請問finally裡面的程式碼還會執行嗎?
 *   如果會,請問是在return前,還是return後。
 *      會,前。
 * 
 *      準確的說,應該是在中間。
 * 
 * 3:try...catch...finally的格式變形
 *         A:try...catch...finally
 *         B:try...catch
 *         C:try...catch...catch...
 *         D:try...catch...catch...finally
 *         E:try...finally 這種做法的目前是為了釋放資源。
 */
public class FinallyDemo2 {
    public static void main(String[] args) {
        System.out.println(getInt());
    }

    public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a在程式執行到這一步的時候,這裡不是return a而是return 30;這個返回路徑就形成了。
             * 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40
             * 再次回到以前的返回路徑,繼續走return 30;
             */
        } finally {
            a = 40;
            return a;//如果這樣結果就是40了。
        }
        // return a;
    }
}

https://www.cnblogs.com/ZHOUVIP/p/7221334.html

相關文章