【发布时间】:2014-04-19 22:43:11
【问题描述】:
在准备 Java 认证时,我看到了一些这样棘手的代码。
这里最后的返回值是:10,但是最后被调用,它把returnval修改为20。
有人可以解释为什么会这样吗?是因为 catch 的 returnval 范围不同吗?还是我在这里遗漏了什么。
class MultipleReturn {
int getInt() {
int returnVal = 10;
try {
String[] students = {"Harry", "Paul"};
System.out.println(students[5]);
}
catch (Exception e) {
System.out.println("About to return :" + returnVal);
return returnVal;
}
finally {
returnVal += 10;
System.out.println("Return value is now :" + returnVal);
}
return returnVal;
}
public static void main(String args[]) {
MultipleReturn var = new MultipleReturn();
System.out.println("In Main:" + var.getInt());
}
}
另一个后续代码是:
class MultipleReturn {
StringBuilder getStringBuilder() {
StringBuilder returnVal = new StringBuilder("10");
try {
String[] students = {"Harry", "Paul"};
System.out.println(students[5]);
}
catch (Exception e) {
System.out.println("About to return :" + returnVal);
return returnVal;
}
finally {
returnVal.append("10");
System.out.println("Return value is now :" + returnVal);
}
return returnVal;
}
public static void main(String args[]) {
MultipleReturn var = new MultipleReturn();
System.out.println("In Main:" + var.getStringBuilder());
}
}
这里的输出是 1010,这是有意义的,因为 finally 修改了 returnval 并且它被持久化了。
任何解释都会有所帮助。
我确实理解这是写得很糟糕的代码,任何头脑正常的人都不应该写这样的东西。
【问题讨论】:
标签: java return try-catch finally