我如何编写自定义exception?
我怎样才能创build一个新的Exception
不同于预先制定的types?
public class InvalidBankFeeAmountException extends Exception{ public InvalidBankFeeAmountException(String message){ super(message); } }
它将显示在第一行写入的InvalidBankFeeAmountException的警告。
所有你需要做的是创build一个新的class
,并extend Exception
。
如果你想要一个未经检查的Exception
,你需要extend RuntimeException
。
注意 :检查Exception
是要求你在try
/ catch
块中包含Exception
,或者在方法声明中有一个“ throws
”子句。 (如IOException
)未经检查的Exceptions
可能像检查Exceptions
一样被抛出,但是您不需要以任何方式显式处理它们( IndexOutOfBoundsException
)。
例如:
public class MyNewException extends RuntimeException { public MyNewException(){ super(); } public MyNewException(String message){ super(message); } }
只是扩展
-
Exception
,如果你想要你的exception被检查(即:必须在一个throws子句中) -
RuntimeException
,如果你想你的exception被取消选中。
看一眼:
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(){...} }
以及一系列关于何时以及为什么要创build自己的例外的指导原则。
一定不要让exception,特别是检查exception。 我build议阅读Joshua Bloch的Effective Java第9章,特别是他的第60项(赞成使用标准例外)。 他的build议还包括使用经过检查的可以从中恢复的exception,使用未经检查的exception(RuntimeExceptions)进行编程错误,并避免不必要地使用已检查的exception。
如果在发现编程错误时抛出一个InvalidBankAccountexception,您可能只想抛出一个标准的未经检查的Java IllegalStateException。 (这个整齐地回避了声明serialVersionUID的需要。)