try和finally中的return

来源:互联网 发布:网络吃饼干是什么意思 编辑:程序博客网 时间:2024/04/30 21:36


finally一定会执行吗?回答当然是否定的,假如在try里执行了System.exit(0)就不会再去执行finally了,守护线程中的finally碰到非守护线程全部退出的时候也可能执行不到。

又如下面的代码,会打印什么内容?

public class Test {
    publicstatic void main(String... args) {
        System.out.println(getValue1());
        System.out.println(getValue2());
    }
 
    publicstatic int getValue1() {
        inti1 = 0;
        inti2 = 1;
        try{
            returni1;
        }finally {
            returni2;
        }
    }
 
    publicstatic int getValue2() {
        inti = 1;
        try{
            returni;
        }finally {
            i++;
        }
    }
}


jad反编译感觉看着也不错。
public class Test
{

public Test()
{
}

public static transient void main(String args[])
{
System.out.println(getValue1());
System.out.println(getValue2());
}

public static int getValue1()
{
boolean flag;
int i;
flag = false;
i = 1;
boolean flag1 = flag;
return i;
Exception exception;
exception;
return i;
}

如果finally和try里都有执行了return,try里的return的值会被废弃。

public static int getValue2()
{
int i = 1;
int j = i;
i++;
return j;
Exception exception;
exception;
i++;
throw exception;
}
}

在try里返回值会先存到一个临时变量中,finally里改变的是原始变量,改完之后再将临时变量的值返回,也就是说在finally里改变返回值变量并不影响返回值本身。
如果返回值是对象,在try里边return,然后在finally中对这个对象的成员进行修改的,修改的结果会反馈到返回值中。
0 0
原创粉丝点击