finally语句总是要执行的!
1)、try与finally里面都有return语句;这种情况忽略try中的return语句,所以最终返回的是finally语句中的返回结果
例如:
public class Start {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(testTry());
}
private static int testTry() {
int a = 0;
try {
a++;
return a;
}finally {
a++;
return a;
}
}
}
返回结果为:2
执行finally里面的return语句
2)、try里面有return,finally里面没有return,这种情况下,finally里面对return的返回变量进行修改不会有影响
例如:
public class Start {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(testTry());
}
private static int testTry() {
int a = 0;
try {
a++;
return a;
}finally {
a++;
}
}
}
返回值为:1
因为return将a的值(1)入栈,以备返回,所以我们对变量a的修改不会影响到栈中的值1。但是如果入栈的是一个引用,假设它表示的是一个对象A的入口地址,那么在finally中对此变量A进行修改,就会导致最终的返回结果改变。