如何编写自定义例外?

Joh*_*nna 52 java exception

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

public class InvalidBankFeeAmountException extends Exception{
    public InvalidBankFeeAmountException(String message){
        super(message);
    }
 }
Run Code Online (Sandbox Code Playgroud)

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

jjn*_*guy 111

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

如果你想要一个Exception未经检查的,你需要extend RuntimeException.

注意:checked Exception是一个要求您Exceptiontry/ catchblock中包围或throws在方法声明中有一个' '子句的.(例如IOException)Unchecked Exceptions可能会像checked一样被抛出Exceptions,但您不需要以任何方式显式处理它们(IndexOutOfBoundsException).

例如:

public class MyNewException extends RuntimeException {

    public MyNewException(){
        super();
    }

    public MyNewException(String message){
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果您使用的是Eclipse,只需编写'throw new <CustomName> Exception',然后使用Autofix(Ctrl + 1).这将为您创建一个扩展Exception的新类,并包含样板代码. (38认同)
  • 我听说扩展[RuntimeExceptions](http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html)可能是不好的做法:*如果可以合理地期望客户从异常,使其成为检查异常.如果客户端无法执行任何操作以从异常中恢复,请将其设置为未经检查的异常.* (5认同)
  • @Pureferret我不认为扩展`RuntimeException`是不好的做法.如果没有经过检查的异常,它肯定会使您的代码更容易使用. (5认同)

too*_*kit 33

只是延长

  • Exception,如果你想要检查你的异常(即:throws子句中要求)
  • RuntimeException,如果您希望取消选中您的例外.


Jim*_*ans 6

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

如果在发现编程错误时抛出InvalidBankAccount异常,您可能只想抛出标准的未经检查的Java IllegalStateException.(这巧妙地避免了声明serialVersionUID的需要.)