1. 程式人生 > 其它 >關於try,finally異常。finally一定會執行嗎?

關於try,finally異常。finally一定會執行嗎?

技術標籤:學習歷程try catchfinally異常

關於try,finally。finally一定會執行嗎?

答案肯定不是。

先看一下結論:
(1)當出現在try之前就有結果返回,也就是有return時,則不會往下執行。
(2)當try之中出現異常時,會執行catch語句,然後是finally;當try中有return時,會將結果返回給finally,然後看finally中是否還有返回語句,如果有則將finally中的結果返回,finally中沒有返回語句則將try中的返回語句返回。

進入正文
以案例來說明:

  1. try之前就結果返回
public class Demo01 {
    private
static int test() { int i = 1; if (i == 1) { return i; } try { System.out.println("執行try"); } finally { System.out.println("執行finally"); } return 0; } public static void main(String[
] args) { System.out.println("執行main:" + test()); } }

結果如下:

解釋:因為try之前已經return,所以程式中的方法後邊就不執行了。也就是finally也不會執行。

  1. try中有異常
public class Demo02 {
    private static int test02() {
        try {
            System.out.println("執行try");
            return 1 / 0;
        } catch
(Exception e) { System.out.println("執行catch"); return 11; } finally { System.out.println("執行finally"); } } public static void main(String[] args) { System.out.println("執行main:" + test02()); } }

結果如下:

解釋:因為try之前沒有return,先執行try,try中有異常,執行catch並將結果11返回給主執行緒,最後執行finally

  1. try中有返回語句
public class Demo03 {
    private static int test03() {
        int i = 0;
        try {
            System.out.println("執行try:" + i);
            return i;
        } finally {
            ++i;
            System.out.println("執行finally:" + i);
        }
    }

    public static void main(String[] args) {
        System.out.println("執行main:" + test03());
    }
}

結果如下:

解釋:因為try之前沒有return,先執行try,try中有返回,將其返回給finally,最後執行finally,此時i為0,++i之後為1,最後返回主執行緒是try中返回的i,所以主執行緒中的值是0。

  1. try和finally中都有返回語句
public class Demo04 {
    private static int test04() {
        try {
            System.out.println("執行try");
            return 1;
        } finally {
            System.out.println("執行finally");
            return 2;
        }
    }

    public static void main(String[] args) {
        System.out.println("執行main:" + test04());
    }
}

結果如下:

解釋:因為try之前沒有return,先執行try,try中有返回,將其返回給finally,最後執行finally,finally中有返回語句,則直接將其返回給主執行緒,所以主執行緒最終值為2。

  1. try和finally中都有返回語句(對第四點的深入理解)
public class Demo05 {
    private static int test05() {
        int i = 1;
        try {
            System.out.println("執行try:" + i);
            i++;
            return i;
        } finally {
            ++i;
            System.out.println("執行finally:" + i);
            return i;
        }
    }

    public static void main(String[] args) {
        System.out.println("執行main:" + test05());
    }
}

結果如下:

解釋:在第四點的基礎上自己可以解釋了,就不囉嗦了


楠哥-------一心想為IT行業添磚加瓦,卻總是面向cv程式設計的程式設計師。
  謝謝閱讀,無誤點贊,有誤還望評論區指正。