加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

try,catch,finally中的return如何影响代码的执行语序

发布时间:2020-12-14 06:38:39 所属栏目:Java 来源:网络整理
导读:1、如果try,catch,finally里面都没有return语句,正常执行顺序如下: try代码块正常执行完成,继续执行finally代码块,最后执行finally后面的语句块; try代码块执行出现异常,则转去执行catch块,catch块执行完后,再执行finally代码块,最后执行finally后

1、如果try,catch,finally里面都没有return语句,正常执行顺序如下:

try代码块正常执行完成,继续执行finally代码块,最后执行finally后面的语句块;

try代码块执行出现异常,则转去执行catch块,catch块执行完后,再执行finally代码块,最后执行finally后面的语句块。

public class Main {
static String str="";
public static void main(String[] args) {
//Scanner scanner = new Scanner(System.in);在线笔试代码用
test(0);
System.out.println(str);

    str="";
    test(1);
    System.out.println(str);
}

private static void test(int i){
    try{
        if(i==1)
            throw new Exception();
        else {
            str+="111-";
            //return;
        }
    }catch (Exception e){
        str+="222-";
        //return;
    }finally {
        str+="333-";
        //return;
    }
    str+="444";//Unreacheable statement
}

}

输出结果:
<code class="language-java">111-333-444
222-333-444

2、(1)如果finally里面有return,不管try、catch里面有没有return,finally语句块后面的代码都不会执行,编译器都会提示错误:Unreachable statement。

public class Main {
static String str="";
public static void main(String[] args) {
//Scanner scanner = new Scanner(System.in);在线笔试代码用
test(0);
System.out.println(str);

    str="";
    test(1);
    System.out.println(str);
}

private static void test(int i){
    try{
        if(i==1)
            throw new Exception();
        else {
            str+="111-";
            //return;
        }
    }catch (Exception e){
        str+="222-";
        //return;
    }finally {
        str+="333-";
        return;
    }
    str+="444";//Unreacheable statement
}

}

(2)如果try、catch块里面都有return,不管finally里面有没有return,finally语句块后面的代码都不会执行,编译器都会提示错误:Unreachable statement。

public class Main {
static String str="";
public static void main(String[] args) {
//Scanner scanner = new Scanner(System.in);在线笔试代码用
test(0);
System.out.println(str);

    str="";
    test(1);
    System.out.println(str);
}

private static void test(int i){
    try{
        if(i==1)
            throw new Exception();
        else {
            str+="111-";
            return;
        }
    }catch (Exception e){
        str+="222-";
        return;
    }finally {
        str+="333-";
        //return;
    }
    str+="444";//Unreacheable statement
}

}

3、不管try、catch、finally里面有没有return,都会执行的组合是:try-finally 或者 try-catch-finally。如下代码中3处标记行号地方,每一个不管用咩用,都不影响最终输出结果。

public class Main {
static String str="";
public static void main(String[] args) {
//Scanner scanner = new Scanner(System.in);在线笔试代码用
test(0);
System.out.println(str);

    str="";
    test(1);
    System.out.println(str);
}

private static void test(int i){
    try{
        if(i==1)
            throw new Exception();
        else {
            str+="111-";
            return;//1
        }
    }catch (Exception e){
        str+="222-";
        return;//2
    }finally {
        str+="333-";
        return;//3
    }
    //str+="444";//Unreacheable statement
}

}

输出结果:

4、在返回值方面,finally里面的return值会覆盖try、catch里面的return值。

/**
 * 测试问题:在返回值方面:finally里面的return值会覆盖try,catch里面的return值
 * @param num
 * @return
 */
static int getNum(int num){
    try{
        int result=2/num;
        return result;
    }catch(Exception e){
        return 0;
    }finally {
        if(num==0)
            return -1;
        if(num==1)
            return 1;
    }
}

}

输出结果:

<code class="language-html">-1
1
1
0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读