我如何编写自定义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的需要。)