java中如果方法中同時(shí)包含了try和finally代碼塊,那么try方法塊會在finally代碼塊前執(zhí)行
如果在try代碼塊 和finally代碼塊中同時(shí)有return語句,那么finally的return的值會覆蓋try代碼塊的值,同時(shí)try中的return語句也會先執(zhí)行,如果return的是方法體,try和finally代碼塊都會執(zhí)行return的方法函數(shù),但是返回值只會是finally代碼塊的。
下面看個(gè)例子:
public class Run {
public static String print(String a) {
System.out.println(a);
return a;
}
public static String test() {
String a = "try代碼塊返回--1";
try {
return print(a);
} catch (Exception e) {
e.printStackTrace();
} finally {
a = "finally代碼塊返回--2";
return print(a);
}
}
public static void main(String[] args) {
String s = test();
System.out.println("最終返回的數(shù)據(jù)是:" + s);
}
}
執(zhí)行上面的main方法打印
try代碼塊返回--1
finally代碼塊返回--2
最終返回的數(shù)據(jù)是:finally代碼塊返回--2
進(jìn)程已結(jié)束,退出代碼0
以上證明:
在finally中的代碼始終都會執(zhí)行,如果try中和finally都執(zhí)行了方法那么這個(gè)方法會被重復(fù)執(zhí)行。