IntelliJ IDEA 没有突出显示引发异常的代码 - 如何打开它?

Def*_*ozo 4 java intellij-idea

我有一个方法:

private void test() throws NullPointerException {
        System.out.println("blabla");
        throw new NullPointerException();
    }
Run Code Online (Sandbox Code Playgroud)

抛出 NullPointerException 但当我尝试调用此方法时:

test();
Run Code Online (Sandbox Code Playgroud)

IntelliJ IDEA 不会警告我它会抛出 NullPointerException。IntelliJ 应该警告我这一点,对吧?

我发现在设置 -> 编辑器 -> 检查中有打开/关闭检查,但我找不到这个检查。

如何开启?

@编辑

好吧,我了解到 NullPointerException 是一种 IntelliJ 不会突出显示的异常类型,因为这是一种严重错误。其他异常如 IOException 正在突出显示。但是,是否可以打开突出显示 NullPointerException ?

nas*_*kin 5

感谢您的编辑,更容易解释您所看到的行为。IntelliJ 会标记未将java.lang.RuntimeException子类化的异常,因为这是一个实际的编译错误。

让我们看看Exception的 JavaDoc :

Exception 类和任何不是 RuntimeException 子类的子类都是检查异常。如果检查异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数边界之外,则需要在方法或构造函数的 throws 子句中声明它们。

...以及 RuntimeException 的 JavaDoc:

RuntimeException 及其子类是未经检查的异常。如果未检查异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数边界之外,则不需要在方法或构造函数的 throws 子句中声明它们。

换句话说,您可以在您的代码中公开抛出 RuntimeException,您不必声明或捕获它,您的编译器会对此非常满意(尽管您的 API 的用户可能不会那么高兴)。另一方面,不继承 RuntimeException 的异常称为“已检查”异常,并且必须根据语言规范声明为由您的方法抛出或在它们可能发生时捕获和处理。

(PS,如果你还没有捕捉到它,NullPointerException 是一个 RuntimeException。因此,它是未经检查的。)