一、執行順序
執行try塊;
如果try塊中有異常,則執行catch塊;
無論有無異常,都會執行finally塊;
但是要注意,如果在try塊或者catch塊中新增了system.exit(0),程式會退出,finally不會執行。
system.exit(0):將停止當前執行緒和所有其他當場死亡的執行緒。finally塊並不能讓已經停止的執行緒繼續執行。
當system.exit(0)被呼叫時,虛擬機器退出當前要執行兩項清理工作:
(1)執行系統中註冊的所有關閉鉤子;
(2)如果程式呼叫了system.runfinalizeronexit(true);,那麼jvm會對所有的還未結束的物件呼叫finalizer。
二、返回值問題-return
無論try-catch中有無異常,如果finally塊中有return語句,最後返回的是finally的return值;
如果finally中沒有return語句,若try中有異常,則返回catch中的return值,反之,則返回try中return值。在這種情況下,return語句是在finally之後執行的。也就是說,如果你宣告你的方法要返回乙個值,在方法體中你使用了try catch finally,則必須在catch或者finally語句塊中宣告要return的值,否則會編譯不通過。
**分析如下:
package com.trycatch;
public
class test
private
static
intreturntest()catch(exception e)finally
}}
程式無異常,**中返回值reval進過了try的賦值,最後到了finally中賦值為0,所以結果返回0;
try塊中:-2
finally塊中:1
返回值:0
若在try中新增乙個異常int a = 1 / 0;則會先執行catch中的賦值return,最後也要執行finally中的返回值。
續加:try-finally形式的模組,在平時很少用,這樣用有乙個很明顯的目的就是如果出現異常,則當前程式不處理,只需要在finally清理資源並將該無法處理的異常拋給它的使用者自行處理,這樣實現了異常處理(throw)與異常清理(finally)的解耦。
try catch finally執行順序
public class test public static int ma catch exception e finally 說明 不出現異常情況 執行順序 try finally 出現異常情況 執行順序 try catch finally try中有返回語句,沒有異常 執行順序 try ret...
try catch finally執行順序
結論 1 不管有木有出現異常,finally塊中 都會執行 2 當try和catch中有return時,finally任會執行 3 finally是在return表示式運算後前執行的,所以函式返回值是在finally執行前確定的 4 finally中最好不要包含return,否則程式會提前退出,返回...
try catch finally使用體會
try catch finally public class finallytest static int test finally 結果是2。在try語句中,在執行return語句時,要返回的結果已經準備好了,就在此時,程式轉到finally執行了。在轉去之前,try中先把要返回的結果存放到不同於...