它是Java足以确保所有可能的代码路径要么返回值或抛出异常。例如,下面的代码是有效的:
public boolean test() {
if (3 < 5) {
return true;
} else {
throw new RuntimeException("Holy crap!");
}
}
在你的榜样,你的try
块有回结束,所以快乐路径覆盖,没有必要超越finally
代码;此外,在try
中抛出的任何异常都将传播出该方法,并且没有机会到达该方法的末尾,因此所有可能的路径将永远不会碰到finally
块下的部分,并且不需要返回语句。 (实际上,如果在底部添加return
语句,编译器可能会给您一个关于无法访问的代码的警告或错误!)
当您添加catch
子句时,事情会发生变化,因为现在代码可能会超出try
/catch
/finally
块:
public String test(){
try{
// Do my work
return "myValue";
}
catch (Exception ex) {
System.out.println("O noes something went wrong");
// swallow exception
}
finally {
System.out.println("I'm in Finally");
}
// Oh no! If an exception was caught, code can actually flow through here.
// Compiler will complain about a missing return statement until you add one.
// return "someOtherValue";
}
返回一个值或抛出错误。 – Sam
@SamWard绝对 - 非常感谢您的纠正! – dasblinkenlight
有趣的部分是当你添加一个“catch”并且不重新抛出。然后事情变得更有趣:-)(请参阅我的回答:http://stackoverflow.com/a/13977143/129655) –