美文网首页
Java中try catch finally语句中含有retur

Java中try catch finally语句中含有retur

作者: hongdada | 来源:发表于2017-07-11 00:31 被阅读0次

经常会遇到,经常会混淆,所以记录一下

主要有3种情况

1.内容中有return,finally中没有return
2.内容中有return,finally中有return
3.内容中有return,finally中没有return,但是会改变返回值的情况,就这个会混淆

下面看代码

场景1:

package com.qhong;

public class Main {
    public static void main(String[] args) {
        System.out.println(test());
    }
    private static int test(){
        int num = 10;
        try{
            System.out.println("try");
            return num += 80;
        }catch(Exception e){
            System.out.println("error");
        }finally{
            if (num > 20){
                System.out.println("num>20 : " + num);
            }
            System.out.println("finally");
        }
        return num;
    }
}

Output:

try
num>20 : 90
finally
90


场景2:

package com.qhong;

public class Main {
    public static void main(String[] args) {
        System.out.println(test());
    }
    private static int test(){
        int num = 10;
        try{
            System.out.println("try");
            return num += 80;
        }catch(Exception e){
            System.out.println("error");
        }finally{
            if (num > 20){
                System.out.println("num>20 : " + num);
            }
            System.out.println("finally");
            num = 100;
            return num;
        }
    }
}

Output:

try
num>20 : 90
finally

100


场景3:

package com.qhong;

public class Main {
    public static void main(String[] args) {
        System.out.println(test());
    }
    private static int test(){
        int num = 10;
        try{
            System.out.println("try");
            return num;
        }catch(Exception e){
            System.out.println("error");
        }finally{
            if (num > 20){
                System.out.println("num>20 : " + num);
            }
            System.out.println("finally");
            num = 100;
        }
        return num;
    }
}

Output:

try
finally
10

总结:

可以看出,
流程是先运行try内部代码,判断finally中是否有return,
如果有,那么就不执行try中的return,继续执行finally中的代码
如果没有,那么执行finally中代码,再执行try的return。


嗯,最麻烦的就是try中return返回的是一个方法,那么在finally有return的时候,方法里面不涉及返回值的代码可以执行,涉及的就不执行,反正就这么招了,一般不要这么干!

相关文章

网友评论

      本文标题:Java中try catch finally语句中含有retur

      本文链接:https://www.haomeiwen.com/subject/oocphxtx.html