ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

003-try-catch-finally-return执行顺序问题

2021-03-10 16:01:58  阅读:161  来源: 互联网

标签:003 return int System try finally catch


一、try-catch-finally-return执行顺序问题

0、原始执行顺序

try — > finally

try —> catch —> finally

1、try catch 中有 return,finally 中无 return,且 try 中无异常抛出

public int add(){
    int i = 1;
    try{
        i = i + 1;
        System.out.println("try: i = " + i);
        return i;
    }catch (Exception e){
        i = i + 2;
        System.out.println("exception: i = " + i);
        return i;
    }finally {
        i = i + 3;
        System.out.println("finally: i = " + i);
    }
}
/**
执行结果:
try: i = 2
finally: i = 5
2
*/

2、try catch finally中均有 return,try中无异常抛出

public int add(){
    int i = 1;
    try{
        i = i + 1;
        System.out.println("try: i = " + i);
        return i;
    }catch (Exception e){
        i = i + 2;
        System.out.println("exception: i = " + i);
        return i;
    }finally {
        i = i + 3;
        System.out.println("finally: i = " + i);
        return i;
    }
}
/**
返回结果5
try: i = 2
finally: i = 5
5
*/

3、try catch 中有 return,finally 中无 return,且 try 中有异常抛出

public int add(){
    int i = 1;
    try{
        i = i + 1;
        int a = i/0;
        System.out.println("try: i = " + i);
        return i;
    }catch (Exception e){
        i = i + 2;
        System.out.println("exception: i = " + i);
        return i;
    }finally {
        i = i + 3;
        System.out.println("finally: i = " + i);
    }
}
/**
返回结果4
exception: i = 4
finally: i = 7
4
*/

4、try catch finally中均有 return,try中有异常抛出

public int add(){
    int i = 1;
    try{
        i = i + 1;
        int a = i/0;
        System.out.println("try: i = " + i);
        return i;
    }catch (Exception e){
        i = i + 2;
        System.out.println("exception: i = " + i);
        return i;
    }finally {
        i = i + 3;
        System.out.println("finally: i = " + i);
        return i;
    }
}
/**
返回结果5
exception: i = 4
finally: i = 7
7
*/

5、try、catch 中有 return,try finally 中有异常,finally 中的异常有 return

public int add(){
    int i = 1;
    try{
        i = i + 1;
        int a = i/0;
        System.out.println("try: i = " + i);
        return i;
    }catch (Exception e){
        i = i + 2;
        System.out.println("exception: i = " + i);
        return i;
    }finally {
        i = i + 3;
        try {
            int b = i/0;
        } catch (Exception e) {
             i = i + 5;
             return i;
        }
        System.out.println("finally: i = " + i);
    }
}
/**
exception: i = 4
12
*/

6、try、catch 中有 return,try finally 中有异常,finally 中的异常无 return

public int add(){
    int i = 1;
    try{
        i = i + 1;
        int a = i/0;
        System.out.println("try: i = " + i);
        return i;
    }catch (Exception e){
        i = i + 2;
        System.out.println("exception: i = " + i);
        return i;
    }finally {
        i = i + 3;
        try {
            int b = i/0;
        } catch (Exception e) {
             i = i + 5;
        }
        System.out.println("finally: i = " + i);
    }
}
/**
exception: i = 4
finally: i = 12
4
*/

总结

  • finally 的代码总会被执行
  • try、catch 中有 return 的时候,也会执行 finally。return 的时候,要注意返回值是否会受到 finally 中代码的影响。
  • finally 中有 return 的时候,会直接在 finally 中退出,导致 try、catch中的 return 失效。
  • finally 中如果有异常的时候,且存在 return 的时候,catch 的 return 会被覆盖。

标签:003,return,int,System,try,finally,catch
来源: https://www.cnblogs.com/ice-image/p/14512269.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有