在自定义异常类时,一些需要注意的事项包括:
继承关系:一般情况下,自定义的异常类应当继承自 Exception 类或其子类。如果希望将异常定义为非检查异常(不需要在方法签名中声明或捕获),可以继承自 RuntimeException 类或其子类。
构造方法:至少需要提供一个带有异常信息的构造方法,用来传递异常的描述信息。可以根据需要提供多个构造方法,方便在不同的场景下抛出异常。
异常信息:在异常类中,可以定义一些字段或属性,用来存储额外的异常信息。这样,在捕获异常时,可以获取更加详细的异常信息。
为什么全部的异常都要继承 RuntimeException?
RuntimeException 及其子类被称为非检查异常,它们在代码中不需要显式地进行异常捕获或声明,这是 Java 语言的一种特性。通过全部的异常继承自 RuntimeException,可以避免在代码中频繁地编写 try-catch 或者在方法签名中声明可能抛出的异常,从而简化了代码结构。
但需要注意的是,对于应用中可能会恢复或处理的异常,应该使用继承自 Exception 的检查异常,这样在代码中可以明确地处理这些异常情况,以保证系统正常运行和错误恢复。而对于无法恢复的异常情况,可以使用继承自 RuntimeException 的非检查异常,它们将在异常发生时直接抛出,告知调用方发生了不可预料的错误。
继承和使用哪种异常类型(检查异常还是非检查异常)取决于具体的业务需求和异常处理策略。