try-catch-finally中,如果在catch中return了,finally中的代碼還會執

答案:會執行,在return 前執行

/*

  • java面試題20--如果catch裏面有return語句,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,形成返回路徑之後,這裏的a就不是a變量了,而是常量30
      */
      } finally {
      a = 40;
      }

// return a;
}
}
執行結果:30

package com.java_02;

/*

  • java面試題20--如果catch裏面有return語句,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,形成返回路徑之後,這裏的a就不是a變量了,而是常量30
      */
      } finally {
      a = 40;
      return a; //如果這樣,就又重新形成了一條返回路徑,由於只能通過1個return返回,所以這裏直接返回40
      }

// return a;
}
}
執行結果:40

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章