public class ReturnFinallyTest {
/**
* @param args
* 在return之前,finally里的语句都会执行.在finally之前回保存,
* 基本类型保存的是值,而对象保存的是引用.在finally执行之后,会load保存的值返回.
* 楼主的例子里是基本类型所以返回的值是6,
* 而forair(forair) 的例子里保存的是T的引用,所以finally中改变了T中的值,
* 当return的时候,返回的是T的引用,所以后来print的结果都是"in finally"
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
T t = new T();
System.out.println(deal(t));
}
static T deal(T t) {
try {
t.s = "in try";
return t;
} finally {
t.s = "in finally";
System.out.println(t);
}
}
static int deal2(int a) {
try {
a++;
return a;
} finally {
a++;
System.out.print("finally");
return a; // 加上此句
}
}
}
class T {
String s;
public String toString() {
return s;
}
}