2009-07-01 105 views
46

如何创建与预制类型不同的新Exception如何编写自定义例外?

public class InvalidBankFeeAmountException extends Exception{ 
    public InvalidBankFeeAmountException(String message){ 
     super(message); 
    } 
} 

它会显示为InvalidBankFeeAmountException这是写在第一行的警告。

+0

我自己创建了一个Exception,如上所示。使用该特殊异常的名称创建一个类并扩展Exception。 但是 它有以下警告:该异常的可序列化类<名称>异常没有声明long的静态最终serialVersionUID字段。 我该如何解决它? – Johanna 2009-07-01 19:57:18

+1

如果你不想担心这个警告,你不必担心。因为Exception类是可序列化的,所以它需要你为这个类设置一个序列号。但是,既然这只是一个警告,我通常会忽略它。 – jjnguy 2009-07-01 20:01:22

回答

103

所有你需要做的就是创建一个新的class并拥有它extend Exception

如果你想要一个未被选中的Exception,你需要extend RuntimeException

注意:一个检查Exception是一个需要你要么环绕Exceptiontry/catch块或对方法声明中的“throws”条款。 (如IOException)未勾选Exceptions可能与选中Exceptions一样被抛出,但您不需要以任何方式明确处理它们(IndexOutOfBoundsException)。

例如:

public class MyNewException extends RuntimeException { 

    public MyNewException(){ 
     super(); 
    } 

    public MyNewException(String message){ 
     super(message); 
    } 
} 
31

只是延长要么

  • Exception,如果你想检查你的异常(即:在需要throws子句)
  • RuntimeException,如果你想你的例外是未经检查的。
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(){...} 
} 

为什么你会创建你自己的例外。

3

请务必避免出现异常情况,特别是检查到的异常情况。我建议阅读Joshua Bloch的Effective Java第9章​​,特别是他的第60项(赞成使用标准例外)。他的建议还包括对可从中恢复的异常使用经过检查的异常,使用未经检查的异常(RuntimeExceptions)进行编程错误,并避免不必要地使用已检查的异常。

如果在发现编程错误时抛出InvalidBankAccount异常,那么您可能只想引发标准的未经检查的Java IllegalStateException。 (这整齐地回避了声明serialVersionUID的需要。)