最近我很惊讶地发现Java 中的finally 块中可以有return 语句。
似乎很多人都认为这样做是一件坏事,如“不要在finally子句中返回 https://web.archive.org/web/20070922061412/http://weblogs.java.net/blog/staufferjames/archive/2007/06/_dont_return_in.html'。再深入一点,我还发现了'Java的返回并不总是 https://web.archive.org/web/20190528011825/http://www.cs.arizona.edu/projects/sumatra/hallofshame/' 它显示了finally块中其他类型的流量控制的一些非常可怕的例子。
所以,我的问题是,谁能给我一个例子,其中finally块中的return语句(或其他流程控制)会产生更好/更可读的代码?
几年前我很难找到由此引起的错误。代码是这样的:
Object problemMethod() {
Object rtn = null;
try {
rtn = somethingThatThrewAnException();
}
finally {
doSomeCleanup();
return rtn;
}
}
发生的情况是在其他代码中引发了异常。它被捕获、记录并重新扔进somethingThatThrewAnException()
方法。但异常并没有传播过去problemMethod()
。经过很长时间的研究,我们终于找到了 return 方法。 finally 块中的 return 方法基本上阻止了 try 块中发生的异常向上传播,即使它没有被捕获。
正如其他人所说,虽然根据 Java 规范从 finally 块返回是合法的,但这是一件坏事,不应该这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)