Netbeans中的未报告异常:有些是,有些则不是

时间:2013-04-10 07:53:18

标签: java exception ide netbeans-7

我正在使用IDE Netbeans7.3 Java 中进行开发。 有些奇怪的东西我无法向自己解释,所以请帮助我理解。

我向班级宣布。第一个继承自Exception

public class MyParameterException extends Exception{        
    public MyParameterException(){
        super();
    }        
    public MyParameterException(String message){
        super(message);
    }
}

,第二个继承自NullPointerException:

public class NullMyParameterException extends NullPointerException{
    public NullMyParameterException(){
        super();
    }        
    public NullMyParameterException(String message){
        super(message);
    }
}

现在,当我在类中创建一个方法时,我写道:

public void test(String s){
    if(s==null) throw new NullMyParameterException("The input string is null."); 
    if(s.trim().isEmpty()) throw new MyParameterException("The input string is empty.");
}

对我来说似乎很奇怪的是,我从IDE中获得了消息unreported exception MyParameterException must be caught or declared to be thrown,但是没有任何关于我可以在该方法中抛出的第一个异常。

据我所知,该方法预计将声明如下:

public void test(String str) throws MyNullParameterException, MyParameterException

但对于Netbeans来说只有足够的:

public void test(String str) throws MyParameterException

这是:

  • IDE错误。
  • 正常,因为继承自NullPointerException的类是特殊的。
  • ...

请让我理解。

3 个答案:

答案 0 :(得分:2)

了解运行时异常和常规异常。 http://docs.oracle.com/javase/6/docs/api/java/lang/RuntimeException.html

编译器不会检查运行时异常。 IDE使用编译器来获取此信息。如果从命令提示符

编译,将看到相同的输出

您也应该看到Difference between Unchecked exception or runtime exception

答案 1 :(得分:1)

你没有被告知NullPointerException - 它是未经检查的异常,应该检查购买你的异常。您应该更改您的程序,NullMyParameterException应该扩展Exception,并且您应该声明这些异常将在方法中抛出:

public void test(String s) throws MyParameterException, NullMyParameterException

答案 2 :(得分:1)

这很正常。当您扩展RuntimeException(在您的情况下为NPE)时,您不需要将该方法声明为抛出它。

对于已检查的异常(在您的情况下为MyParameterException),您必须将方法声明为throws MyParameterException才能抛出它。

您可以阅读有关checked vs unchecked exceptions

的更多信息