try{}catch{}finally{}的return執行邏輯
阿新 • • 發佈:2021-01-09
技術標籤:java
try{}catch{}finally{}程式碼塊裡面都有return:
public class DemoTest { public static void main(String[] args) { int num = getNum(); System.out.println("執行結果: " +num); } public static int getNum() { int i; try { i = 8; System.out.println("try塊中的i的值: "+i); int a = 90 / 0; return i; } catch (Exception e) { System.out.println(e.getMessage()); i = 5; return i; } finally { // finally中的程式碼一定會執行 System.out.println("執行finally~~~"); i = 6666;// 此處重新給i賦值 System.out.println("finally 塊中的值: "+i); return i;// 無論如何總會在此處返回i的值 } } }
執行結果:
無論是否發生異常總是返回finally中的值.
return在try{}catch{}程式碼塊裡面,finally{}程式碼塊中沒有return:
public class DemoTest { public static void main(String[] args) { int num = getNum(); System.out.println("執行結果: " +num); } public static int getNum() { int i; try { i = 8; System.out.println("try塊中的i的值: "+i); // int a = 90 / 0; return i;// 沒有異常會在此處返回i的值 } catch (Exception e) { System.out.println(e.getMessage()); i = 5; return i;// catch了異常之後會在此處返回i的值 } finally { // finally中的程式碼一定會執行 System.out.println("執行finally~~~"); i = 6666;// 此處重新給i賦值 System.out.println("finally 塊中的值: "+i); } } }
執行結果:
1,沒有異常,返回try塊中的值.
2,發生異常,返回catch中的值.
return在catch{}塊裡面和在try{}catch{}finally{}程式碼塊外面:
public class DemoTest { public static void main(String[] args) { int num = getNum(); System.out.println("執行結果: " +num); } public static int getNum() { int i; try { i = 8; System.out.println("try塊中的i的值: "+i); int a = 90 / 0; } catch (Exception e) { System.out.println(e.getMessage()); i = 5; return i;// catch了異常之後會在此處返回i的值 } finally { // finally中的程式碼一定會執行 System.out.println("執行finally~~~"); i = 6666;// 此處重新給i賦值 System.out.println("finally 塊中的值: "+i); } return i;// 沒有異常返回此處的值 } }
執行結果:
1,catch住異常之後返回catch{}塊中的值.
2,沒有異常不會執行catch{}塊中的程式碼,會執行到最後,返回最後的值.
總結:
1,只要finally{}塊中有return則一定會返回finally{}塊中的值.
2,catch{}塊中有return和在finally{}程式碼塊後面有return,執行結果catch住異常之後會直接返回catch{}中的值,沒有異常的話會執行最後返回最後的值.