Java - 处理调用堆栈中更高的异常?

时间:2014-08-10 22:51:42

标签: java exception

如果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;
    }
  }
}

2 个答案:

答案 0 :(得分:2)

由于foo()的结果用作bar(..)的参数,因此必须在调用bar之前计算它。但是在foo的结果可以建立之前会抛出异常,导致异常终止并且不再执行代码(除了finally块之外,直到捕获到异常)。如果foo 返回异常而非抛出异常,则会有所不同。

答案 1 :(得分:1)

foo()已在main方法中“执行”,而不在bar方法中,然后将foo()的返回传递给bar()

foo调用之前调用

bar()来计算要传递给bar的int,以便将异常传播到main而不是bar