java的
这个问题在这里已经有了答案:
如果try
块中的return
已到达,它将控制权交给finally
块,并且函数最终正常返回(而不是一个throw)。
如果发生异常,但代码从catch
块return
,则控制权将转移到finally
块,并且函数最终会正常返回(而不是抛出)。
在你的例子中,你finally
有了return
,所以无论发生什么,函数都会返回34
,因为finally
会有最后的(如果你愿意的话)。
尽管在你的例子中没有涉及,但即使你没有catch
并且如果在try
块中抛出了一个异常并且没有被捕获,情况也是如此。 通过从finally
块return
,你完全抑制了异常。 考虑:
public class FinallyReturn {
public static final void main(String[] args) {
System.out.println(foo(args));
}
private static int foo(String[] args) {
try {
int n = Integer.parseInt(args[0]);
return n;
}
finally {
return 42;
}
}
}
如果你运行它而不提供任何参数:
$ java FinallyReturn
... foo
的代码抛出ArrayIndexOutOfBoundsException
异常。 但是因为finally
块会return
,所以这个异常被取消了。
这是最好避免在finally
使用return
一个原因。
这是一些代码,显示它是如何工作的。
class Test
{
public static void main(String args[])
{
System.out.println(Test.test());
}
public static String test()
{
try {
System.out.println("try");
throw new Exception();
} catch(Exception e) {
System.out.println("catch");
return "return";
} finally {
System.out.println("finally");
return "return in finally";
}
}
}
结果是:
try
catch
finally
return in finally
链接地址: http://www.djcxy.com/p/73691.html
上一篇: java
下一篇: In Java, is the result of the addition of two chars an int or a char?