[英]Java try- catch- finally block
如果我运行以下代码:
try{
return false;
} catch(Exception e){
e.printStackTrace();
}
finally{
return true;
}
为什么返回true ?
摘自Java Language Specification第14.20.2节
(我的斜体字)。 return
是一种“突然完成”,换句话说, finally
的return
否决了try
内部的return
。
之所以返回true
是因为无论何时finally
块通过return
-ing或引发异常而突然完成,该完成都会取代以前的任何返回值或异常。 (请参见Java SE 7版Java语言规范中的第14.20.2节“ try-finally
和try-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.