在Java中當try、finally語句中包含return語句時,執行狀況究竟是怎樣的,finally中的代碼是否執行,你們衆說紛紜,有的說會執行,有的說不會執行,到底哪一種說法正確,如今經過下面的例子加以說明:spa
第一種狀況:try中包含return語句,finally中不包含debug
public class TestTry { 字符串
static String s=""; class
public static void main(String args[]){ test
s = test1(); bug
System.out.println("8 "+s); im
} static
public static String test1(){ img
try{
System.out.println("try.....");
return s = "a";
}
finally{
s="b";
System.out.println("17 "+s);
}
}
}
這裏咱們定義了一個字符串 s,在try裏面將"a"賦值給s,並直接返回,在finally裏面把"b"賦值給s,最終s的值是a仍是b呢?下面是執行的結果
try.....
17 b
8 a
咱們發現最後的結果是a,可是b優先於a打印出來了,這是爲何呢?經過debug單步調試咱們發現,在執行try中的return以前會先執行 finally中的代碼,以後再執行return語句。若是finally中也包含return語句,會出現什麼狀況呢,咱們看第二種狀況。
第二種狀況:try,finally中都包含return語句
咱們將上面的代碼稍做改動
public class TestTry {
static String s="";
public static void main(String args[]){
s = test1();
System.out.println("8 "+s);
}
public static String test1(){
try{
System.out.println("try.....");
return s = "a";
}
finally{
return s="b";
}
}
}
將finally中的s="b";直接改爲return s="b";,會出現什麼樣的結果呢?字符串s是a仍是b呢?
try.....
8 b
咱們發現最後的打印結果是b。
結論:1.不管try裏面有沒有return語句,finally語句必定都會執行(不愧是finally,名字起的好)。
2.若是finally中沒 有return語句,try裏面有return,那麼在執行try中的return語句以前會先去執行finally中的代碼,再去執行try中的 return語句;若是在finally中也包含return語句,將會直接返回,再也不去執行try中的return語句。