美文网首页
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