java自定义异常必须以exception结尾并采用大驼峰命名,如insufficientbalanceexception;需置于对应业务包下,提供四个标准构造器及含上下文的错误消息。

Java 中自定义异常的命名不是风格问题,而是类型契约问题——必须以 Exception 结尾,且采用大驼峰(PascalCase)格式,否则 IDE 不识别、框架不匹配、团队协作易出错。
必须以 Exception 结尾
这是 JVM 生态的硬性约定,不是建议:
- JDK 标准异常(如
NullPointerException、IllegalArgumentException)全部带Exception后缀 - IDE 依赖该后缀高亮异常、支持 Ctrl+Click 跳转、校验
catch和throws - Spring 的
@ExceptionHandler、SonarQube 等工具默认只扫描*Exception类名 - 写成
InvalidUserError(属Error语义)、UserException(太笼统)、invalid_user_exception(违反 Java 命名规范)都不合规
名称要直白表达业务语义
目标是让调用方一眼看懂“错在哪、为什么错”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 推荐形容词 + 名词结构:如
InsufficientBalanceException、ExpiredTokenException、MissingRequiredFieldException - 涉及领域对象时前置对象名:如
UserNotFoundException、OrderValidationException、ProductStockException - 避免动词开头(如
ValidateFailedException)、缩写(如InvldInputExc)、通用词(如BusinessException、MyException) - 对比示例:
InvalidOrderStatusException✅ 比OrderException❌ 更精准
包结构要体现业务域层级
异常类应放在对应业务模块的包路径下,而非统一扔进 exception 包:
- 正确方式:
com.example.payment.InsufficientBalanceException - 错误方式:
com.example.exception.InsufficientBalanceException(丢失领域上下文) - 好处:模块解耦清晰;多人协作时能快速定位异常归属;便于按包做全局异常拦截或日志分级
构造器与消息也要配合命名逻辑
命名只是第一步,配套实现才能让异常真正“可读、可查、可维护”:
- 至少提供四个标准构造器:
()、(String)、(Throwable)、(String, Throwable) - 异常消息需含关键上下文,例如
"用户ID=8899的状态[DELETED]不支持退款操作",而非"操作非法" - 若需错误码,可额外增加带
int errorCode或String code的构造器,但不能删减上述四个基础构造器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










