4

我理解这个错误的想法。但我想我不明白这是如何在调用堆栈中起作用的。

文件 Main.java:

public static void main(String[] args) {
    try {
         Function1();
      } catch (myException e) {
      System.out.println(e.getMessage());
    }
}
public static void Function1() {
    Function2();
}

Function2 存在于另一个文件中:

文件2.java

public void Function2() throws myException {
     ....
}

因此,通过几次调用(在调用堆栈中),我得到了 Function2,它指定了“抛出 myException”的要求。为什么 main 函数(错误指向的地方)没有识别出我抛出了 myException ?

任何关于我的“异常知识”中的“漏洞”所在的指导将不胜感激。

艾蒂,

4

2 回答 2

1

漏洞是Function2声明它抛出异常,但Function1没有。Java 不会挖掘可能的调用层次结构,而是直接通过您在throws语句中声明的内容。

Function1不宣布投掷而侥幸逃脱可能是因为myExceptionRuntimeException.

于 2010-11-30T19:31:25.080 回答
1

您的问题是Function1()没有声明它throws myException- 这意味着应该有 2 个编译错误:一个是关于未捕获或声明的异常,另一个是关于捕获未声明的异常。

于 2010-11-30T19:32:12.877 回答