我有点困惑,因为我希望能够在 Java 中抛出自定义异常。要在函数内执行此操作,我必须将 throws MyException
添加到函数的 header 。
然后任何依次调用该函数的东西都必须添加 throws MyException
或有一个 try-catch block 。但这是为什么呢?
例如,当在 java 中创建 Stack 并调用 pop 函数时,我不必使用 try-catch,但 Java 中的 pop 方法抛出 NoSuchElementException
(或 w/e 它是)如果堆栈上没有元素。
最佳答案
NoSuchElementException
是一个 RuntimeException
(未经检查的异常),我们不需要处理或声明 RuntimeException
S,因此编译器不会提示,而是在运行时抛出它。
在检查异常的情况下,即所有不是 RuntimeException
子类型的异常,编译器将检查合适的 catch
子句,使程序能够继续它的执行过程,在 catch
中执行操作之后;为此,您需要使用 try/catch
block 来处理它们或使用 throws
子句声明它们 - 将处理异常的责任委托(delegate)给调用链的更高层。如果您的自定义异常不是 RuntimeException
,已检查异常的规则也适用于您的自定义异常。
Checked exceptions ---> Forced by the compiler to handle or propagate
Un-checked exceptions ---> Not checked by the compiler thus appears at runtime
关于java - 在 Java 中抛出自定义异常与内置异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009528/