我调用了引发异常的方法,但是即使本教程说我应该得到一个错误,我也不必将此方法放在静态void main(String args [])中的try catch块中。为什么是这样?以下是我的代码和本教程的链接。我在教程中玩了第二个例子。
https://beginnersbook.com/2013/04/java-throws/?unapproved=133049&moderation-hash=486e9de11daa2c67068e84cdacd88794#comment-133049
public class Sample2 {
static void myMethod() throws ArithmeticException, NullPointerException {
System.out.println("myMethod has been successfully called");
throw new ArithmeticException("Arithmetic Expression has been thrown");
}
public static void main(String args[]) {
myMethod();
}
}
最佳答案
在谈论Java中的异常时,仅调用两种主要类型:已检查的异常和未检查的异常。
被检查的异常是在编译时检查的:如果不处理被检查的异常(例如,使用try / catch块或throws关键字),则编译器将引发错误,也就是说,它将不会让您构建程序,这就是为什么您应该始终处理所有检查的异常的原因。
未检查的异常将在运行时检查:如果不处理这些类型的异常,编译器将不会引发错误。
现在的问题是:编码时如何区分这两种类型?
首先,请记住,java中的每个异常都应继承自“ Exception”类。
现在,有一种简单的方法可以从已检查的异常中分辨出未检查的异常:从“ RuntimeException”继承的任何异常类都被视为未检查的异常,而从“ Exception”继承但不是“ RuntimeException”的任何类都被视为受检查的异常。
在您的情况下,您要调用的方法将引发ArithmeticException
和NullPointerException
。但是,这两个异常是从“ RuntimeException”继承的。因此,根据上面编写的规则,这两个异常是未经检查的异常,这就是为什么调用方法myMethod()
时无需处理它。
关于java - 为什么引发异常的此方法在调用时不必放在try catch块中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56296180/