2026-06-02 07:04:50
在Java中定义自定义异常类,主要通过继承Exception或RuntimeException实现,具体步骤和要点如下:
1. 选择继承的基类无参构造:使用默认错误信息。
接收字符串消息的构造:传入具体错误描述。
接收消息和内部异常的构造:支持异常链,便于排查根源。
示例1:受检异常(继承Exception)
public class InvalidAgeException extends Exception { // 无参构造 public InvalidAgeException() { super(); } // 接收错误消息的构造 public InvalidAgeException(String message) { super(message); } // 接收消息和内部异常的构造 public InvalidAgeException(String message, Throwable cause) { super(message, cause); }}示例2:非受检异常(继承RuntimeException)
public class InvalidUserInputException extends RuntimeException { // 接收错误消息的构造 public InvalidUserInputException(String message) { super(message); } // 接收消息和内部异常的构造 public InvalidUserInputException(String message, Throwable cause) { super(message, cause); }}3. 在业务逻辑中抛出自定义异常示例:抛出受检异常
public class Person { private int age; public void setAge(int age) throws InvalidAgeException { if (age < 0 || age > 150) { throw new InvalidAgeException("年龄必须在0到150之间"); } this.age = age; }}4. 调用方处理异常示例:处理受检异常
try { Person person = new Person(); person.setAge(-5);} catch (InvalidAgeException e) { System.out.println("错误:" + e.getMessage());}5. 关键注意事项自定义异常类:
// 受检异常public class InvalidAgeException extends Exception { public InvalidAgeException() { super(); } public InvalidAgeException(String message) { super(message); } public InvalidAgeException(String message, Throwable cause) { super(message, cause); }}// 非受检异常public class InvalidUserInputException extends RuntimeException { public InvalidUserInputException(String message) { super(message); } public InvalidUserInputException(String message, Throwable cause) { super(message, cause); }}业务逻辑中使用:
public class Person { private int age; public void setAge(int age) throws InvalidAgeException { if (age < 0 || age > 150) { throw new InvalidAgeException("年龄无效:" + age); } this.age = age; }}调用方处理:
public class Main { public static void main(String[] args) { try { Person person = new Person(); person.setAge(200); } catch (InvalidAgeException e) { System.err.println("捕获异常:" + e.getMessage()); } }}通过以上步骤,可以定义出符合业务需求的自定义异常类,提升代码的可读性和错误处理能力。