首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

是return之前执行么?该如何处理

2012-03-09 
是return之前执行么?codeJava]public class Demo {public static void main(String[] args) {// TODO Aut

是return之前执行么?
code=Java]public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Demo().test());
}
static int test(){
int x = 1;
try
{
return x;

}
finally
{
++x;
}
}
}[[/code]
返回的是1很不解,debug调试还是不解!请教大牛!

[解决办法]
finally 是在return之前执行的
[解决办法]
finally在return执行,但是不会影响return的结果。
[解决办法]
/*这种问题得看字节码才能明白:
static int test();
Code:
 Stack=1, Locals=3, Args_size=0
 0:iconst_1 //常量1压栈
 1:istore_0 //常量1出栈,存储到局部变量0里面,也就是x里面
 2:iload_0 //从局部变量0载入
 3:istore_1 //存到局部变量1里面,变量1就是要返回的值
 4:iinc0, 1 //局部变量0加1,从这是执行finally里面的++x,可以看出来x再怎么修改对返回结果都没有任何的影响。
 7:iload_1 //从局部变量1载入
 8:ireturn //返回
 9:astore_2
 10:iinc0, 1
 13:aload_2
 14:athrow
 */

[解决办法]

探讨
/*这种问题得看字节码才能明白:
static int test();
Code:
Stack=1, Locals=3, Args_size=0
0:iconst_1 //常量1压栈
1:istore_0 //常量1出栈,存储到局部变量0里面,也就是x里面
2:iload_0 //从局部变量0载入
3:istore_1 ……

[解决办法]
探讨
public class smallT{
public static void main(String args[]){
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}
public int get(){
try{
return 1 ;
}
finally{
return 2 ;
}
}……

热点排行
Bad Request.