如何编写自定义例外?

时间:2009-07-01 18:17:46

标签: java exception

如何创建与预制类型不同的新Exception

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

它将显示第一行中写入的 InvalidBankFeeAmountException 的警告。

4 个答案:

答案 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(){...}
}

以及一套关于何时以及为何创建自己的例外的准则。