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的主要内容,如果未能解决你的问题,请参考以下文章

Java finally关键字

教妹学 Java:try-catch-finally

java finally深入探究

Java finally语句到底是在return之前还是之后执行

java基础之finally(转)

java: cry-catch-finally 应用问题。