java异常return在finally前面_java 异常处理

java异常return在finally前面_java 异常处理java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用异常处理2种方法:1.抛 (throws)2.自己处理try/catch/finally1.抛出:向上一级抛出,异常实际没有被解决掉2.try/catch/finally(1)正常执行public class Test1 { public static void main(String[] args) { Test1 test1 = new Test1(); test

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用
异常处理2种方法:

1.抛 (throws)
2.自己处理try/catch/finally

1.抛出:向上一级抛出,异常实际没有被解决掉

2.try/catch/finally

(1)正常执行

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        test1.say();
    }
    public void say() { 
   
        String str = "123";
        try { 
   
        System.out.println(Integer.parseInt(str));
        System.out.println("正常执行");
        //return;
        }catch(Exception e) { 
   
            System.out.println("有异常");
            //return;
        }finally { 
   
            System.out.println("finally");
            //return;
        }
    }
}

复制代码
123
正常执行
finally
(2)异常情况:

复制代码

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        test1.say();
    }
    public void say() { 
   
        String str = "abc";
        try { 
   
        System.out.println(Integer.parseInt(str));
        System.out.println("正常执行");
        //return;
        }catch(Exception e) { 
   
            System.out.println("有异常");
            //return;
        }finally { 
   
            System.out.println("finally");
            //return;
        }
    }
}
有异常
finally

结论:finally是一定会被执行的!因此,finally通常用于释放资源,在IO流操作和数据库操作中,程序没有报错,执行了 try 和 finally 代码块,程序报错了,执行try catch finally 代码块

那么这里就有一个问题,执行的先后顺序?

这里我们需要连接一个关键字return!

Java中的return有两方面的用途:

(1)返回方法指定类型的值(前提是方法的返回值类型不是void)。

(2)方法的结束,它会导致当前的方法退出。

通过return我们去探究一下,try catch finally的执行先后顺序!

复制代码

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "123";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   

            return "catch";
        } finally { 
   
            return "finally";
        }
    }
}
结果为:finally
public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "abc";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   

            return "catch";
        } finally { 
   
            return "finally";
        }
    }
}
结果也是finally

这是为什么?finally是必定执行的代码块!所有finally逻辑上虽然能使用return,但一般finally不会接return。否则你什么也测不出来

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "abc";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   
            System.out.println("catch");
            return "catch";
        } finally { 
   
            System.out.println("finally");
        }
    }
}
catch
finally
catch

由此可以看出执行的顺序为:

(1)Integer.parseInt(str);
(2)System.out.println(“catch”);
(3)System.out.println(“finally”);
(4)return “catch”;
同理其他:
复制代码

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "abc";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   
            System.out.println("catch");
            return "catch";
        } finally { 
   
            System.out.println("finally");
            return "finally + return";
        }
    }
}

复制代码

catch
finally
finally + return
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168700.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu安装pycharm激活成功教程_pycharm安装后无解释器

    ubuntu安装pycharm激活成功教程_pycharm安装后无解释器首先需要安装JDK,Ubuntu自带openjdk的残留,可通过java-version命令进行查看,如果不安装JDK的话,pycharm安装时就会报错:NoJDKfound.PleasevalidateeitherIDEA_JDK,JDK_HOMEorJAVA_HOMEenvironmentvariable…,对于JDK的安装,网上有相当多的教程,但是大部分都不能利用…

    2022年8月29日
    1
  • jdbctype有哪些类型oracle_java type类型

    jdbctype有哪些类型oracle_java type类型java.sql.Types值JavaTypeIBMDB2OracleSybaseSQLInformixIBMContentManagerBIGINTjava.lang.longBIGINTNUMBER(38,0)BIGINTBIGINTINT8DK_CM_BIGINTBINARYbyte[]CHAR…

    2022年10月20日
    1
  • Wi-Fi曝安全漏洞 面临KRACK攻击风险

    Wi-Fi曝安全漏洞 面临KRACK攻击风险近日,WPA2被曝存在严重安全漏洞。WPA2在2004年发布,自2006年3月起已经成为一种强制性的标准,是目前使用范围最广的Wi-Fi网络保护协议。何为KRACK攻击?在回答这个问题之前,让我们快速普及一些Crypto101课程的内容。高级加密标准(AES)已经采用了十几年。它是一种对称密钥密码,即使用相同的密钥来加密和解密。虽然传统上标准的AE…

    2022年5月5日
    38
  • phpstrom2021激活码(JetBrains全家桶)

    (phpstrom2021激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    72
  • pycharm 使用 anaconda 环境[通俗易懂]

    pycharm 使用 anaconda 环境[通俗易懂]两个方法一:从annaconda内部打开pycharm这里有个下拉框可以选选择你要的anaconda环境再launch你的pycharm但有时候好像不大灵光还是用不上这个环境二:方法二就是万能方法从pycharm内部来配置环境,非常简单。界面最右上角齿轮图标,点击。找到interpreter这里下拉框可以选,发现没有anaconda的环境,你就showall然后点左上角加号选anaconda环境,再去添加你已经存在的anaconda环境。…

    2022年8月28日
    1
  • 2020年下半年总结与计划

    2020年下半年总结与计划0x00前言2020年到如今已经到了十二月中旬,下半年所学的东西还是挺多,我觉得学习的一个效率也是有着飞跃般的提升。主要的原因可能在于我和我的好朋友(基友)住在一个房间

    2021年12月12日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号