如何创建与预制类型不同的新Exception
?
public class InvalidBankFeeAmountException extends Exception{
public InvalidBankFeeAmountException(String message){
super(message);
}
}
它将显示第一行中写入的 InvalidBankFeeAmountException 的警告。
答案 0 :(得分:111)
您需要做的就是创建一个新的class
并让它extend Exception
。
如果您想要取消选中Exception
,则需要extend RuntimeException
。
注意:已选中的Exception
是要求您围绕Exception
/ try
块中的catch
或拥有关于方法声明的'throws
'子句。 (例如IOException
)未经检查Exceptions
可能会像检查Exceptions
一样被抛出,但您无需以任何方式明确处理它们(IndexOutOfBoundsException
)。
例如:
public class MyNewException extends RuntimeException {
public MyNewException(){
super();
}
public MyNewException(String message){
super(message);
}
}
答案 1 :(得分:32)
只需延长
Exception
,如果你想要检查你的例外(即:在throws条款中要求)RuntimeException
,如果您希望取消选中您的例外。答案 2 :(得分:6)
请确保不要过度使用异常,特别是检查异常。我建议阅读Joshua Bloch的Effective Java第9章,特别是他的第60项(赞成使用标准例外)。他的建议还包括对可以从中恢复的异常使用已检查的异常,使用未经检查的异常(RuntimeExceptions)进行编程错误,并避免不必要地使用已检查的异常。
如果在发现编程错误时抛出InvalidBankAccount异常,您可能只想抛出标准的未经检查的Java IllegalStateException。 (这巧妙地避免了声明serialVersionUID的需要。)
答案 3 :(得分:3)
看看:
http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=1
第2页给出了一个例子:
public class DuplicateUsernameException
extends Exception {
public DuplicateUsernameException
(String username){....}
public String requestedUsername(){...}
public String[] availableNames(){...}
}
以及一套关于何时以及为何创建自己的例外的准则。