我正在使用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
这是:
NullPointerException
的类是特殊的。请让我理解。
答案 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
才能抛出它。