最详细的try catch finally中有返回值的不同情况论证

第一种情况:try{} catch(){} finally{} return;

这种情况是按照正常的顺序执行

public static void main(String[] args) {
        int res=test1();
        System.out.println("res:"+res);
    }

    public static int test1(){
        int i=12;
        try {
            int m=1/0;
            System.out.println("i:"+i);
        }catch (Exception e){
            System.out.println("e:"+i);
        }finally {
            i++;
            System.out.println("f:"+i);
        }
        return i;
    }


输出结果:

e:12
f:13
res:13

第二种情况:try{return;} catch(){} finally{} return;

这种情况是程序在执行try中的return时会将返回的值放在一个临时缓冲区中,在这个期间会执行finally中的代码,但是不会影响return值的大小;

public static void main(String[] args) {
        int res=test2();
        System.out.println("res:"+res);
    }

    public static int test2(){
        int i=12;
        try {
            return i;
        }catch (Exception e){
            System.out.println("e:"+i);
        }finally {
            i++;
            System.out.println("f:"+i);
        }
        return i;
    }

输出结果:

f:13
res:12

第三种情况:try{  } catch(){return;} finally{ } return;

这种情况是try语句出现异常的时候,catch代码就捕获这个异常,然后就将返回的值放在一个临时缓冲区里,再执行finally里面的代码块,后面的那个return代码是不会执行的;如果try语句里面没有异常,那就是按照try,finally,return的顺序执行。

public class Return {
    public static void main(String[] args) {
        int res=test2();
        System.out.println("res:"+res);
    }

    public static int test2(){
        int i=12;
        try {
            int m=1/0;
        }catch (Exception e){
            i++;
            System.out.println("e:"+i);
            return i;
        }finally {
            i++;
            System.out.println("f:"+i);
        }
        return i;
    }
}

结果

e:13
f:14
res:13

第四种情况:try{ return; } catch(){} finally{return; }

这种情况是先执行try里面的return语句,将返回的结果放在临时缓冲区中,然后再执行 finally中的代码,因为finally中有return所以会替换掉临时缓冲区里面的值从而提前退出。

public class Return {
    public static void main(String[] args) {
        int res=test2();
        System.out.println("res:"+res);
    }

    public static int test2(){
        int i=12;
        try {
            i++;
            return i;
        }catch (Exception e){
            i++;
            System.out.println("e:"+i);
        }finally {
            i++;
            System.out.println("f:"+i);
            return i;
        }
    }
}

结果

f:14
res:14

第五种情况:try{ } catch(){ return; } finally{return; }

这种情况是先执行try里面的代码,如果没有异常就直接执行finally里面的代码返回结果;如果存在异常的情况就执行catch中的代码,因为里面有return所以会将返回的结果保存到临时缓冲区中,再执行finally中的代码,因为finally中有return所以会替换掉临时缓冲区里面的值从而提前退出程序。

public class Return {
    public static void main(String[] args) {
        int res=test2();
        System.out.println("res:"+res);
    }

    public static int test2(){
        int i=12;
        try {
            int j=1/0;
        }catch (Exception e){
            i++;
            System.out.println("e:"+i);
            return i;
        }finally {
            i++;
            System.out.println("f:"+i);
            return i;
        }
    }
}

结果

e:13
f:14
res:14

第六种情况:try{return; } catch(){ return; } finally{return; }

扫描二维码关注公众号,回复: 9163799 查看本文章

分为两种情况:

假设try语句中不存在异常,先执行try语句中代码,将返回值放在临时缓冲区中,然后执行finally中代码,因为finally中有return,所以替换掉临时缓冲区中的值然后退出程序;

public class Return {
    public static void main(String[] args) {
        int res=test2();
        System.out.println("res:"+res);
    }

    public static int test2(){
        int i=12;
        try {
            //int j=1/0;
            i++;
            return i;
        }catch (Exception e){
            i++;
            System.out.println("e:"+i);
            return i;
        }finally {
            i++;
            System.out.println("f:"+i);
            return i;
        }
    }
}

结果

f:14
res:14

假设try语句中存在异常,先执行try语句中代码,然后执行catch中的代码,因为catch中有return,因此将返回值放在临时缓冲区中,然后执行finally中代码,因为finally中有return,所以替换掉临时缓冲区中的值然后退出程序;


public class Return {
    public static void main(String[] args) {
        int res=test2();
        System.out.println("res:"+res);
    }

    public static int test2(){
        int i=12;
        try {
            int j=1/0;
            return i;
        }catch (Exception e){
            i++;
            System.out.println("e:"+i);
            return i;
        }finally {
            i++;
            System.out.println("f:"+i);
            return i;
        }
    }
}

结果

e:13
f:14
res:14
发布了42 篇原创文章 · 获赞 6 · 访问量 2953

猜你喜欢

转载自blog.csdn.net/qq_44666176/article/details/103759166