繁体   English   中英

Java try-catch-finally块

[英]Java try- catch- finally block

如果我运行以下代码:

try{
   return false;
} catch(Exception e){
       e.printStackTrace();
}
finally{
   return true;
}

为什么返回true

摘自Java Language Specification第14.20.2节

  • 如果由于任何其他原因R导致try块的执行突然完成,则执行finally块,然后可以选择:
    • 如果finally块正常完成,则try语句由于原因R突然完成。
    • 如果final块由于原因S突然完成,则try语句由于原因S突然完成(并且原因R被丢弃)

(我的斜体字)。 return是一种“突然完成”,换句话说, finallyreturn否决了try内部的return

之所以返回true是因为无论何时finally块通过return -ing或引发异常而突然完成,该完成都会取代以前的任何返回值或异常。 (请参见Java SE 7版Java语言规范中的第14.20.2节“ try-finallytry-catch-finally 。)

因为无论在try catch部分发生什么,finally块都将始终按照您的要求进行操作,因此在这种情况下它将返回true。 只需删除finally语句,它应该返回false。

当try或catch块通过调用System.exit函数终止时, System.exit块不执行。 类似地,如果执行try catch的线程在执行try或catch块时死亡,那么finally块可能不会执行。

因此,即使try块返回false,您的try catch finally块也几乎总是返回true。

因为如果遇到返回,finally块将始终执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM