我有一个方法:
private void test() throws NullPointerException {
System.out.println("blabla");
throw new NullPointerException();
}
抛出NullPointerException,但是当我尝试调用此方法时:
test();
IntelliJ IDEA不会警告我它会抛出NullPointerException。 IntelliJ应该警告我这个,对吧?
我发现在设置中打开/关闭检查 - >编辑 - >检查,但我找不到这个检查。
如何打开它?
@edit
好吧,我了解到NullPointerException是IntelliJ不会突出显示的一种异常类型,因为这是一种严重的错误。正在强调其他异常,如IOException。但是,是否可以在<?p>上突出显示NullPointerException
答案 0 :(得分:3)
感谢您的编辑,您可以更轻松地解释您所看到的行为。 IntelliJ标志不是子类java.lang.RuntimeException的异常,因为这是一个实际的编译错误。
让我们看一下Exception的JavaDoc:
类Exception和任何不属于RuntimeException子类的子类都是经过检查的异常。如果可以通过执行方法或构造函数抛出并在方法或构造函数边界外传播,则需要在方法或构造函数的throws子句中声明已检查的异常。
...而且JavaDoc for RuntimeException:
RuntimeException及其子类是未经检查的异常。如果方法或构造函数的throws子句可以通过执行方法或构造函数抛出并在方法或构造函数边界外传播,则不需要在方法或构造函数的throws子句中声明未经检查的异常。
换句话说,您可以在代码中公开抛出RuntimeException,并且您不一定要声明它或捕获它,并且您的编译器将非常满意(尽管您的API的用户可能不那么喜欢)。另一方面,不是RuntimeException子类的异常称为“已检查”异常,并且必须根据语言的规范声明为方法抛出或者在可能发生时捕获和处理。
(P.S。,如果你还没有捕获它,NullPointerException是一个RuntimeException。因此,它是未选中的。)
答案 1 :(得分:1)
有一个Intellij插件可以帮助您发现未经检查的异常。您可以自定义搜索过程以在搜索时包含/排除库。但是它不提供任何实时检查。