try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行

很明显在中间执行!

看看代码,finally中间没有return返回1:

 

public class ABC {

    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        System.out.println("结果: " + new ABC().test());
    }
    
    static int test(){
        int i = 1;
        try {
            System.out.println("try里面的i : " + i);
            return i;
        }finally{
            System.out.println("进入finally...");
            ++i;
            System.out.println("fianlly里面的i : " + i);
			//return i;
        }
    }
}

  结果是:

再看代码:finally中间有return返回2:

public class ABC {

    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        System.out.println("结果: " + new ABC().test());
    }
    
    static int test(){
        int i = 1;
        try {
            System.out.println("try里面的i : " + i);
            return i;
        }finally{
            System.out.println("进入finally...");
            ++i;
            System.out.println("fianlly里面的i : " + i);
            return i;
        }
    }
}

结果是:

因此,如果finally中没有return则最终会执行try中的return  而且返回值是当时在try中存储的值,若,finally中间有return则返回finally中的值。

另外再看代码:

class Test {
    public static void main(String[] args) {
        System.out.println(new Test().test());;

    }
    int test()
    {

        try
        {
            return func1();
        }finally{
            return func2();
        }
    }
    int func1()
    {
        System.out.println("func1");
        return 1;
    }
    int func2()
    {
        System.out.println("func2");
        return 2;
    } 
}

结果为:

posted @ 2016-03-17 10:17  爱上胡萝卜的猴子  阅读(444)  评论(0编辑  收藏  举报