1. 程式人生 > >Java中finally語句塊的深度解析(try catch finally的執行順序)

Java中finally語句塊的深度解析(try catch finally的執行順序)

首先擺出結論:

1、除了以下2種情況外,不管有木有出現異常,finally塊中程式碼都會執行;

①程式未進入try{}塊的執行,如在try之前出現執行時異常,程式終止。

②程式進入到try{}和catch{}塊的執行,但是在try{}或者catch{}塊碰到了System.exit(0)語句,jvm直接退出。finally{}塊不會執行
2、當try和catch中有return時,finally仍然會執行;
3、finally是在return後面的表示式運算後執行的(此時並沒有返回運算後的值,而是先把要返回的值的引用地址儲存起來,而不管finally中的程式碼怎麼樣,最後返回的都是這個引用地址(或者說這個引用地址指向的物件),而這個返回值在finally中會被不會被改變要分以下2種情況)。

若這個返回值是基本資料型別(int,double)或者不可變類物件(如String,Integer),

則不管finally中的程式碼怎麼樣,返回的值都不會改變,仍然是之前儲存的值,若這個值是可變類物件),所以函式返回值是在finally執行前確定的;
4、finally中最好不要包含return,否則程式會提前退出,返回值不是try或catch中儲存的返回值,而是finally中的return值。