程序代码如下public class TryCatchFinally {
public static int work() {
int result = 0;
try {
System.out.println("try block");
result++;
return result;
} catch (Exception e) {
System.err.println("catch block");
return result;
} finally{
System.out.println("finally block");
result++;
System.out.println("result = "+result);
} }
public static void main(String[] args) {
System.out.println("result = "+work());
}}
finally块的代码会在try块的return语句之前执行,所以分析来看输出应该是
try block
finally block
result = 2
result = 2但是实际运行的输出结果却是
try block
finally block
result = 2
result = 1把result改成类的全局变量还是这样的输出结果,是return的时候出现的问题吗?
public static int work() {
int result = 0;
try {
System.out.println("try block");
result++;
return result;
} catch (Exception e) {
System.err.println("catch block");
return result;
} finally{
System.out.println("finally block");
result++;
System.out.println("result = "+result);
} }
public static void main(String[] args) {
System.out.println("result = "+work());
}}
finally块的代码会在try块的return语句之前执行,所以分析来看输出应该是
try block
finally block
result = 2
result = 2但是实际运行的输出结果却是
try block
finally block
result = 2
result = 1把result改成类的全局变量还是这样的输出结果,是return的时候出现的问题吗?
解决方案 »
- 求助:五子棋棋盘鼠标监听发生偏移
- jdk版本问题?
- 有代码看不懂,帮忙解释一下。
- 谁知道JAVA语言 和C语言 能在SOCKET网络下能互相访问的啊?我的Client是JAVA写的 朋友是用C写的Server端
- 继续:split取出字符后的问题
- 求使用Java在内存中生成每通道16位或32位的图像,及对其进行操作和显示的方法。
- 请问这该如何引用
- 请教各位XDJM: JDK 1.3 中,能使用正则表达式吗?
- 有关java游戏提问
- 请问各位大侠,applet和application的连库方式有什么不同?
- java 类型转换,一个深度的问题?
- java jimi开发报错: No source image set.
try block
finally block
result = 2
result = 1
为什么System.out.println("result = "+result);执行了两次,而且结果不一样
求大侠指点
看了一下执行的顺序try
try blockfinally
finally block
result = 2再执行了try里的return
finally里改变返回值变量并不影响返回值本身
result = 1结果就是
try block
finally block
result = 2
result = 1
而你在catch里面就已经return了,此时的result=1;
自然main方法调用放回的result=1。你哪里看错了吧。
public static Person work() {
Person result = new Person();
try {
System.out.println("try block");
result.setName("name");
return result;
} catch (Exception e) {
System.err.println("catch block");
return result;
} finally{
System.out.println("finally block");
result.setName("name1");
System.out.println("result = "+result.getName());
} }
public static void main(String[] args) {
System.out.println("result = "+work().getName());
}
}class Person {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}