【Java基础篇】try catch finally语句包含return语句时的执行过程
生活随笔
收集整理的這篇文章主要介紹了
【Java基础篇】try catch finally语句包含return语句时的执行过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網上有很多人探討Java中異常捕獲機制try…catch…finally塊中的finally語句是不是一定會被執行?
很多人都說不是,當然他們的回答是正確的,經過我試驗,至少有兩種情況下finally語句是不會被
- try語句沒有被執行到,如在try語句之前就返回了,這樣finally語句就不會執行,這也說明了finally語句被執行的必要而非充分條件是:相應的try語句一定被執行到。
- 在try塊中有System.exit(0);這樣的語句,System.exit(0);是終止Java虛擬機JVM的,連JVM都停止了,所有都結束了,當然finally語句也不會被執行到。
當然還有很多人探討finally語句的執行與return的關系,我這里總結一段話來說明整個的執行過程:
下面我舉例說明:
測試用例1:
public class FinallyTest2 {public static void main(String[] args) {System.out.println(test2());}public static int test2() {int b = 20;try {System.out.println("try block");return b += 80;} catch (Exception e) {System.out.println("catch block");} finally {System.out.println("finally block");if (b > 25) {System.out.println("b>25, b = " + b);}return 200;}// return b;}}運行結果是:
try block finally block b>25, b = 100 200執行過程分析:
測試用例2:
public class FinallyTest3 {public static void main(String[] args) {System.out.println(test3());}public static int test3() {int b = 20;try {System.out.println("try block");return b += 80;} catch (Exception e) {System.out.println("catch block");} finally {System.out.println("finally block");if (b > 25) {System.out.println("b>25, b = " + b);}b = 150;}return 2000;} }運行結果是:
try block finally block b>25, b = 100 100執行過程分析:
測試用例3:
import java.util.*;public class FinallyTest6 {public static void main(String[] args) {System.out.println(getMap().get("KEY").toString());}public static Map<String, String> getMap() {Map<String, String> map = new HashMap<String, String>();map.put("KEY", "INIT");try {map.put("KEY", "TRY");return map;}catch (Exception e) {map.put("KEY", "CATCH");}finally {map.put("KEY", "FINALLY");map = null;}return map;} }運行結果是:
FINALLY執行過程分析:
關于try catch finally語句網上有很多分析的文章,我覺得其實記住兩點就行了,一個是執行return語句的時候,會將return語句后面表達式的值計算出來并且后面不再變化,另外一個是return語句的覆蓋問題,后面的return語句會覆蓋前面的return語句。記住這兩點再去分析try catch finally語句就很容易了。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的【Java基础篇】try catch finally语句包含return语句时的执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝锦鲤卡是干什么的
- 下一篇: JVM 调优 1:“精通 JVM 调优,