我调用了引发异常的方法,但是即使本教程说我应该得到一个错误,我也不必将此方法放在静态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”的任何类都被视为受检查的异常。

在您的情况下,您要调用的方法将引发ArithmeticExceptionNullPointerException。但是,这两个异常是从“ RuntimeException”继承的。因此,根据上面编写的规则,这两个异常是未经检查的异常,这就是为什么调用方法myMethod()时无需处理它。

关于java - 为什么引发异常的此方法在调用时不必放在try catch块中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56296180/

10-14 16:45
查看更多