Java自定义异常类的创建步骤

大哥大姐们请分析下,Java自定义异常类的创建步骤
最新回答
微光迷失尘夏

2026-04-28 18:14:14

创建Java自定义异常类的步骤如下:

  1. 确定异常类型

    根据业务需求选择继承Exception(受检异常)或RuntimeException(非受检异常):

    继承Exception:调用方必须显式处理(try-catch)或声明抛出,适用于可预期的错误场景(如输入校验失败)。

    继承RuntimeException:调用方无需强制处理,适用于程序逻辑错误(如空指针、数组越界等)。

  2. 创建自定义异常类

    新建一个类,命名通常以Exception结尾(如InvalidInputException),并继承选定的基类。

    必须提供的构造方法:

    无参构造方法:public CustomException() { super(); }

    带错误信息的构造方法:public CustomException(String message) { super(message); }

    可选构造方法(增强功能):

    带Cause的构造方法(支持异常链):public CustomException(String message, Throwable cause) { super(message, cause); }

    示例代码:public class InvalidAgeException extends Exception { public InvalidAgeException() { super(); } public InvalidAgeException(String message) { super(message); } public InvalidAgeException(String message, Throwable cause) { super(message, cause); }}

  3. 在业务逻辑中抛出异常

    使用throw关键字在特定条件下抛出异常,增强代码可读性和错误定位能力。

    示例场景:年龄校验失败时抛出InvalidAgeException:public void setAge(int age) throws InvalidAgeException { if (age < 0 || age > 150) { throw new InvalidAgeException("年龄范围应为0-150,当前值:" + age); } this.age = age;}

  4. 调用时处理异常

    受检异常(继承Exception):调用方必须通过try-catch处理或继续声明抛出。

    示例:try { person.setAge(-5);} catch (InvalidAgeException e) { System.out.println("捕获异常: " + e.getMessage());}

    非受检异常(继承RuntimeException):调用方可选择处理,但建议捕获以提升健壮性。

关键注意事项:

  • 异常信息清晰性:构造方法中传递的message应明确描述错误原因(如包含参数值、范围等)。
  • 异常链使用:通过Throwable cause参数封装底层异常,便于追踪问题根源(如new CustomException("文件读取失败", e))。
  • 避免滥用自定义异常:仅在标准异常无法准确表达业务错误时使用,减少代码复杂度。

完整示例:

// 1. 定义非受检异常(可选)public class InvalidAgeRuntimeException extends RuntimeException { public InvalidAgeRuntimeException(String message) { super(message); }}// 2. 业务逻辑中使用两种异常public class Person { private int age; // 抛出受检异常 public void setCheckedAge(int age) throws InvalidAgeException { if (age < 0) { throw new InvalidAgeException("年龄不能为负数"); } this.age = age; } // 抛出非受检异常 public void setUncheckedAge(int age) { if (age > 150) { throw new InvalidAgeRuntimeException("年龄超过最大值150"); } this.age = age; }}// 3. 调用处理public class Main { public static void main(String[] args) { Person person = new Person(); // 处理受检异常 try { person.setCheckedAge(-1); } catch (InvalidAgeException e) { System.err.println("受检异常: " + e.getMessage()); } // 处理非受检异常(可选) try { person.setUncheckedAge(200); } catch (InvalidAgeRuntimeException e) { System.err.println("非受检异常: " + e.getMessage()); } }}

通过以上步骤,可创建结构清晰、易于维护的自定义异常类,有效提升代码的健壮性和可调试性。