0

我正在使用 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.");
}

对我来说奇怪的是,我unreported exception MyParameterException must be caught or declared to be thrown从 IDE 收到了消息,但没有提到我可以在方法中抛出的第一个异常。

据我所知,该方法应声明如下:

public void test(String str) throws MyNullParameterException, MyParameterException

但对于 Netbeans 来说就足够了:

public void test(String str) throws MyParameterException

这是:

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

请让我理解。

4

3 回答 3

2

阅读有关运行时异常和常规异常的信息。http://docs.oracle.com/javase/6/docs/api/java/lang/RuntimeException.html

编译器不检查运行时异常。IDE 使用编译器来获取此信息。如果您从命令提示符编译,将看到相同的输出

您也应该看到这一点Unchecked exception 或 runtime exception 之间的区别

于 2013-04-10T07:58:20.790 回答
1

您不会收到有关 NullPointerException 的警告 - 这是未经检查的异常,应该检查您的异常。您应该更改您的程序,NullMyParameterException 也应该扩展 Exception,并且您应该声明这些异常将通过以下方式在方法中抛出:

public void test(String s) throws MyParameterException, NullMyParameterException
于 2013-04-10T07:57:52.210 回答
1

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

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

您可以阅读有关已检查与未检查异常的更多信息

于 2013-04-10T07:59:50.870 回答