java异常处理执行顺序详解try catch finally
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
不含return的执行顺序
执行顺序为执行try中代码,如果没有异常,然后执行try catch后续的代码。如:
public static void main(String[] args) { try { int j = 10 / 2; System.out.println("执行try中代码!"); } catch (Exception e) { e.printStackTrace(); System.out.println("执行catch中代码!"); } System.out.println("执行catch后的代码!"); }
执行结果为:
如果有异常,则try中异常后的代码将不执行,开始执行catch中的代码,执行完成后,执行try catch后续的代码,示例代码如下:
public static void main(String[] args) { try { int j = 10 / 0; System.out.println("执行try中代码!"); } catch (Exception e) { e.printStackTrace(); System.out.println("执行catch中代码!"); } System.out.println("执行catch后的代码!"); }
执行结果
发生异常语句后的代码:System.out.println(“执行try中代码!”)不再执行。
finally子句
使用try catch finally子句时,无论发生不发生异常,finally子句中的代码都是要执行,一般用于释放资源、连接等操作。
public static void main(String[] args) { try { int i = 8/0; System.out.println("执行try中代码!"); } catch (Exception e) { System.out.println("执行catch中代码!"); } finally { System.out.println("执行finally中代码!"); } System.out.println("执行try catch后的代码!"); }
执行try catch或try catch finally之后,执行后续的代码。
含return的执行顺序
如果不包含finally语句,在try子句和catch子句中均含有return语句,代码遇到return语句则终止代码的执行,try catch后面的语句不可能得到执行。
含有finally语句的try catch子句包含return语句执行顺序,执行finally子句,然后执行try或者catch的return语句,此时若finally语句包含return或终止运行,则try catch子句中的return语句将不执行。如:
public static void main(String[] args) { Integer i= testReturn(); System.out.println(i); } public static Integer testReturn(){ try { int i = 8/0; System.out.println("执行try中代码!"); return 1; } catch (Exception e) { System.out.println("执行catch中代码!"); return 0; } finally { System.out.println("执行finally中代码!"); return 3; } }
执行结果
如果再finally终止程序运行,则丢失返回值
public static void main(String[] args) { Integer i= testReturn(); System.out.println(i); } public static Integer testReturn(){ try { int i = 8/0; System.out.println("执行try中代码!"); return 1; } catch (Exception e) { System.out.println("执行catch中代码!"); return 0; } finally { System.out.println("执行finally中代码!"); System.exit(0); //退出程序,返回值丢失 } }
执行结果如下图:
没有输出返回值
返回类型是对象类型时值的变化
返回类型如果是对象类型,则返回的是指针。此时如果finally中包含对象的炒作,注意返回值的变化。示例代码如下
创建一个Person的类
public class Person { private String name; private String adress; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", adress='" + adress + '\'' + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAdress() { return adress; } public void setAdress(String adress) { this.adress = adress; } }
含有return的测试代码如下
public static void main(String[] args) { Person person = testObjReturn(); System.out.println(person.toString()); } public static Person testObjReturn(){ Person person = new Person(); try { int i = 8/0; person.setName("王小二"); person.setAdress("电子街1号"); return person; } catch (Exception e) { person.setName("朱小三"); person.setAdress("电子街1号"); return person; } finally { person.setName("李老五");; } }
执行结果
结论
try catch finally带有return语句时,既可以将return语句放到try和catch中,也可以放到过程的结尾,一般建议放到结尾,便于统一管理。特别注意finally包含return语句时try、catch中的return将不再执行。尤其当返回的变量是实体对象时,finally中的语句如果对返回的变量进行修改,则将影响到返回值。
以上就是java异常处理执行顺序详解try catch finally的详细内容,更多关于java异常try catch finally执行顺序的资料请关注程序员之家其它相关文章!
相关文章
Springboot 如何指定获取出 yml文件里面的配置值
这篇文章主要介绍了Springboot 如何指定获取出 yml文件里面的配置值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07SpringBoot使用Filter实现签名认证鉴权的示例代码
这篇文章主要介绍了SpringBoot使用Filter实现签名认证鉴权的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-04-04Eclipse中maven异常Updating Maven Project的统一解决方案
今天小编就为大家分享一篇关于Eclipse中maven异常Updating Maven Project的统一解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-12-12java中自定义Spring Security权限控制管理示例(实战篇)
本篇文章主要介绍了java中自定义Spring Security权限控制管理示例(实战篇) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-02-02Java中出现java.lang.IllegalStateException异常错误的解决
这篇文章主要介绍了Java中出现java.lang.IllegalStateException异常错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-01-01
最新评论