自定义运行时异常须继承RuntimeException,不需throws声明或强制捕获;需提供无参、带消息字符串及可选带cause的构造器;推荐语义清晰的类名;可扩展业务字段但避免耗时操作。

自定义运行时异常必须继承 RuntimeException,且不需要在方法签名中用 throws 声明,调用方也无需强制捕获。核心是让异常语义清晰、构造简洁、符合业务场景。
类声明需继承 RuntimeException
直接用 extends RuntimeException,不加 throws 修饰,也不需要实现任何特殊接口。
- 不能继承
Exception(否则变成受检异常) - 推荐使用有意义的类名,如
UserNotFoundException、InvalidAgeException - 类通常声明为
public,便于跨包使用
必须提供标准构造函数
至少提供两个构造器:无参构造器和带消息字符串的构造器,方便不同场景抛出。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public XxxRuntimeException() { super(); }public XxxRuntimeException(String message) { super(message); }- 可选添加带 cause 的构造器:
public XxxRuntimeException(String message, Throwable cause)
不需重写任何方法,但可增强语义
默认行为已足够;若需扩展,可添加业务字段(如错误码、用户ID),但不要破坏异常的轻量性。
立即学习“Java免费学习笔记(深入)”;
- 例如增加
private final int errorCode;字段,并在构造器中赋值 - 提供
getErrorCode()方法供上层提取结构化信息 - 避免在构造器或方法中做耗时操作(如日志打印、网络调用)
抛出时用 throw new,位置自然
在业务校验失败处直接 throw new XxxRuntimeException("年龄不能为负"),无需 try-catch 包裹。
- 常见位置:参数校验、状态检查、权限验证之后
- 消息应具体明确,避免泛泛而谈(如不用“发生错误”,而用“订单状态非法:当前不可取消”)
- 若需链式异常,可用
throw new XxxRuntimeException("更新失败", e)

















