2026-04-28 18:14:14
创建Java自定义异常类的步骤如下:
确定异常类型
根据业务需求选择继承Exception(受检异常)或RuntimeException(非受检异常):
继承Exception:调用方必须显式处理(try-catch)或声明抛出,适用于可预期的错误场景(如输入校验失败)。
继承RuntimeException:调用方无需强制处理,适用于程序逻辑错误(如空指针、数组越界等)。
创建自定义异常类
新建一个类,命名通常以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); }}
在业务逻辑中抛出异常
使用throw关键字在特定条件下抛出异常,增强代码可读性和错误定位能力。
示例场景:年龄校验失败时抛出InvalidAgeException:public void setAge(int age) throws InvalidAgeException { if (age < 0 || age > 150) { throw new InvalidAgeException("年龄范围应为0-150,当前值:" + age); } this.age = age;}
调用时处理异常
受检异常(继承Exception):调用方必须通过try-catch处理或继续声明抛出。
示例:try { person.setAge(-5);} catch (InvalidAgeException e) { System.out.println("捕获异常: " + e.getMessage());}
非受检异常(继承RuntimeException):调用方可选择处理,但建议捕获以提升健壮性。
关键注意事项:
完整示例:
// 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()); } }}通过以上步骤,可创建结构清晰、易于维护的自定义异常类,有效提升代码的健壮性和可调试性。