如果foo()
的结果传递给bar()
并且bar()
有一个处理异常的机制,为什么这不能编译(未报告的异常异常;必须被捕获或声明为被抛出??
public class Foobar {
public static int foo() throws Exception {
throw new Exception();
}
public static void main(String[] args) {
System.out.println(bar(foo()));
}
public static int bar(int x) {
try {
return x;
} catch (Exception e) {
return 0;
}
}
}
答案 0 :(得分:2)
由于foo()
的结果用作bar(..)
的参数,因此必须在调用bar
之前计算它。但是在foo
的结果可以建立之前会抛出异常,导致异常终止并且不再执行代码(除了finally块之外,直到捕获到异常)。如果foo
返回异常而非抛出异常,则会有所不同。
答案 1 :(得分:1)
foo()
已在main
方法中“执行”,而不在bar
方法中,然后将foo()
的返回传递给bar()
。
foo
调用之前调用 bar()
来计算要传递给bar
的int,以便将异常传播到main
而不是bar
。