return研究


public static int f(){ try{ return 1; }finally{ return 2; } }

答案:

返回2,可能jvm认为一个方法里面有两个return语句并没有太大的意义,所以try中的return语句给忽略了,直接起作用的是finally中的return语句。

    public static final String test() {
        String t = "";
 
        try {
            t = "try";
            return t;
        } catch (Exception e) {
            // result = "catch";
            t = "catch";
            return t;
        } finally {
            t = "finally";
        }
    }

答案:

返回try,通过分析字节码,在try语句的return块中return返回的引用变量t并不是try语句外定义的引用变量t,而是系统重新定义了一个局部引用t,这个引用指向了引用t对应的值,也就是try。即使在finally语句中把引用t指向了值finally,因为return的返回引用已经不是t,所以引用t的对应的值和try语句中的返回值无关了。

    public static final String test() {
        String t = "";

        try {
            t = "try";
            Integer.parseInt(null);
            return t;
        } catch (Exception e) {
            t = "catch";
            return t;
        } finally {
            t = "finally";
            // System.out.println(t);
            // return t;
        }
    }

答案:

返回catch,原理同上。

    public static final String test() {
        String t = "";

        try {
            t = "try";
            Integer.parseInt(null);
            return t;
        } catch (Exception e) {
            t = "catch";
            Integer.parseInt(null);
            return t;
        } finally {
            t = "finally";
            //return t;
        }
    }

答案:

直接报错。

    public static final String test() {
        String t = "";

        try {
            t = "try";
            Integer.parseInt(null);
            return t;
        } catch (Exception e) {
            t = "catch";
            Integer.parseInt(null);
            return t;
        } finally {
            t = "finally";
            return t;
        }
    }

答案:

返回finally。

posted @ 2018-04-11 15:00  coolgame  阅读(120)  评论(0编辑  收藏  举报