java中如果方法中同时包含了try和finally代码块,那么try方法块会在finally代码块前执行
如果在try代码块 和finally代码块中同时有return语句,那么finally的return的值会覆盖try代码块的值,同时try中的return语句也会先执行,如果return的是方法体,try和finally代码块都会执行return的方法函数,但是返回值只会是finally代码块的。
下面看个例子:
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("最终返回的数据是:" + s);
}
}
执行上面的main方法打印
try代码块返回--1
finally代码块返回--2
最终返回的数据是:finally代码块返回--2
进程已结束,退出代码0
以上证明:
在finally中的代码始终都会执行,如果try中和finally都执行了方法那么这个方法会被重复执行。