Java異常try裡面有return,finally代碼會執行嗎

來源:互聯網
上載者:User

標籤:不執行   strong   java虛擬機器   返回   []   out   ati   new t   print   

try{}裡有一個return語句,那麼緊跟在這個try後的finally{}裡的code會不會被執行,什麼時候被執行,在return前還是後?

肯定會執行。finally{}塊的代碼只有在try{}塊中包含遇到System.exit(0);之類的導致Java虛擬機器直接退出的語句才會不執行。

當程式執行try{}遇到return時,程式會先執行return語句,但並不會立即返回——也就是把return語句要做的一切事情都準備好,也就是在將要返回、但並未返回的時候,程式把執行流程轉去執行finally塊,當finally塊執行完成後就直接返回剛才return語句已經準備好的結果。

例如我們有如下程式:

public class Test

{

       publicstatic void main(String[] args)

       {

              System.out.println(new Test().test());;

       }

       staticint test()

       {

              int x = 1;

              try

              {

                     returnx;

              }

              finally

              {

                     System.out.println("finally塊執行:" + ++x);

              }

       }

}

此時的輸出結果為:

finally塊執行:2

1

看到上面程式中finally塊已經執行了,而且程式執行finally塊時已經把x變數增加到2了。但test()方法返回的依然是1,這就是由return語句執行流程決定的,Java會把return語句先執行完、把所有需要處理的東西都先處理完成,需要返回的值也都準備好之後,但是還未返回之前,程式流程會轉去執行finally塊,但此時finally塊中的對x變數的修改已經不會影響return要返回的值了。

但如果finally塊裡也包含return語句,那就另當別論了, 因為finally塊裡的return語句也會導致方法返回,例如把程式該為如下形式:

public class Test

{

       publicstatic void main(String[] args)

       {

              System.out.println(new Test().test());;

       }

       staticint test()

       {

              int x = 1;

              try

              {

                     returnx++;

              }

              finally

              {

                     System.out.println("finally塊執行:" + ++x);

                     returnx;

              }

       }

}

此時的輸出結果為:

finally塊執行:3

3

正如介紹的,程式在執行returnx++;時,程式會把return語句執行完成,只是等待返回,此時x的值已經是2了,但程式此處準備的傳回值依然是1。接下來程式流程轉去執行finally塊,此時程式會再次對x自加,於是x變成了3,而且由於finally塊中也有return x;語句,因此程式將會直接由這條語句返回了,因此上面test()方法將會返回3。

Java異常try裡面有return,finally代碼會執行嗎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.