Java----finally
Posted 弄潮儿儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java----finally相关的知识,希望对你有一定的参考价值。
1.无return语句的执行顺序
try{ //可能抛出异常 }catch(Exception e){ //捕获异常 }finally{ //不管有无异常都执行 }
finally内的代码不管有无异常都会执行,具体来说
- 如果没有异常,在try代码块执行完毕后执行;
- 如果有异常且被catch捕获,在catch代码块执行完毕后执行;
- 如果有异常单没有catch捕获,在提交给上层调用者前执行;
2.带有return的语句执行顺序
- 如果在try或者cathc里面有return语句,finally没有return,则先执行finally代码块,然后进行return,但是finally并不能改变return的返回值;
- 如果finally里面也有return,不仅会覆盖掉try和catch的返回值,并且掩盖try和catch的异常,如果finally里面也有异常,会原异常就会被覆盖掉;
- 如果try中是System.exit(0),则finally不会被执行;
- 如果try-finally所在的线程被杀死了,finally也不会被执行。
3.注意
- 不要在finally中使用return语句;
- finally总是执行的,除非程序或者线程被中断了;
- try-catch-finally中,catch并不是必须的,可以只有try-finally,表示的是异常向上传递。
- 在JVM运行机制中:如果try语句块中有return,编译器会将return的内容先复制一份,然后在执行finally中的代码,查看是否有return,如果有,会忽略掉try中的return,没有的话,需要看对try中return的是引用类型还是基本类型 。(如果在finally中有操作try中返回的数据,那么引用类型数据会受到影响,基本类型不会受到影响。)
参考:https://www.cnblogs.com/daixiaotian/p/6943904.html
以上是关于Java----finally的主要内容,如果未能解决你的问题,请参考以下文章