public int inc() {
int x;
try {
x = 1;
return x;
} catch (Exception e) {
x = 2;
return x;
} finally {
x = 3;
}
}
public StringBuffer inc(StringBuffer x) {
try {
x.append("1");
x = new StringBuffer();
return x;
} catch (Exception e) {
x.append("2");
return x;
} finally {
x.append("3");
x = new StringBuffer("4");
}
}
public static void main(String[] args) {
int x = new Test().inc();
System.out.println(x);
StringBuffer x1 = new StringBuffer(), x2 = new Test().inc(x1);
System.out.println(x1);
System.out.println(x2);
}
}
异常参数Java
分享到:
------解决方案--------------------
目测是
1
1
3
------解决方案-------------------- System.out.println(x);//输出1,因为方法返回的是1,虽然finally会被执行
StringBuffer x1 = new StringBuffer(), x2 = new Test().inc(x1);
//输出1,传递的是一个对象的“复本”修改的是对象指向的内容
System.out.println(x1);
//输出3,finally怎样都会执行,因为其修改了地址里面的内容
System.out.println(x2); ------解决方案-------------------- 答案是:1,1,3。第一为1,还可以理解,int x = new Test().inc()里面,因为在进入finally语句块之前,会有一个暂时保存的过程,即会X的值暂时保存在一个局部变量里面,运行完finally语句块之后再到那个局部变量里面拿,所有X的值不管你在finally里面怎么改,它都将是1.
但是我不理解的是第二个和第三个。楼主帮讲解一下。谢谢