解读java try catch 异常后还会继续执行吗
java try catch异常后还会继续执行吗
catch中如果你没有再抛出异常,那么catch之后的代码是可以继续执行的,但是try中,报错的那一行代码之后 一直到try结束为止的这一段代码 , 是不会再执行的。
//代码1 public static void test() throws Exception { throw new Exception("参数越界"); System.out.println("异常后"); //编译错误,「无法访问的语句」 }
//代码2 try{ throw new Exception("参数越界"); }catch(Exception e) { e.printStackTrace(); } System.out.println("异常后");//可以执行
//代码3 if(true) { throw new Exception("参数越界"); } System.out.println("异常后"); //抛出异常,不会执行
小结下
若一段代码前有异常抛出,并且这个异常没有被捕获,这段代码将产生编译时错误「无法访问的语句」。如代码1;
若一段代码前有异常抛出,并且这个异常被try…catch所捕获,若此时catch语句中没有抛出新的异常,则这段代码能够被执行,否则,同第1条。如代码2;
若在一个条件语句中抛出异常,则程序能被编译,但后面的语句不会被执行。如代码3
try-catch块捕获异常三种情况
第一种情况
try块中所有语句正常执行完毕,不会发生异常,那么catch块中的所有语句都将会被忽略
第二种情况
try语句块在执行中遇到异常,那么在try块中其余剩下的代码都将被忽略,系统会自动生成相应的异常对象,如果这个异常对象与catch中声明的异常类型相匹配,则相应的catch块将会被执行
第三种情况
try语句块在执行中遇到异常,如果这个异常对象与catch中声明的异常类型不匹配,程序会中断。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
java开发RocketMQ之NameServer路由管理源码分析
这篇文章主要为大家介绍了java开发中RocketMQ之NameServer路由管理源码分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪2021-11-11SpringBoot如何使用RateLimiter通过AOP方式进行限流
这篇文章主要介绍了SpringBoot如何使用RateLimiter通过AOP方式进行限流,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)
下面小编就为大家带来一篇浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-01-01
最新评论