# Java 代码风格规范 通用 Java 项目代码风格规范,适用于所有 Java 后端项目。 --- ## 1. 项目结构 ### 包组织 - 基础包按公司域名倒写 + 项目名,如 `com.company.project` - 按业务域划分模块,如 `user/`、`order/`、`product/` ### 目录结构(各模块内) ``` controller/ # 控制层 service/ # 服务层接口 service/impl/ # 服务层实现 entity/ # 实体层 entity/dto/ # 数据传输对象 entity/vo/ # 视图对象 mapper/ # 数据访问层(MyBatis/JPA) manager/ # 复杂业务编排 checker/ # 业务校验工具 ``` --- ## 2. 命名规范 | 元素 | 规范 | 示例 | |------|------|------| | 类名 | PascalCase,2-41字符 | `UserService`、`OrderController` | | 方法名 | camelCase,1-31字符 | `getUserById()`、`saveOrder()` | | 变量名 | camelCase | `userId`、`orderList` | | 常量 | UPPER_SNAKE_CASE | `MAX_RETRY_COUNT`、`DEFAULT_PAGE_SIZE` | | 包名 | 全小写,dot分隔 | `com.company.project.common.util` | ### 特定后缀/前缀 - Service 接口:前缀 `I`,如 `IUserService` - Service 实现:后缀 `Impl`,如 `UserServiceImpl` - DTO:后缀 `Dto` 或 `DTO` - VO:后缀 `VO` - 查询参数对象:后缀 `Query` 或 `Criteria` - 校验工具类:后缀 `Checker` 或 `Validator` - Manager:后缀 `Manager`(复杂业务编排层) --- ## 3. 代码格式 - **缩进**:4空格(禁止Tab) - **行长度**:最大120-200字符 - **花括号**:K&R风格(同一行开括号) - **文件最大行数**:通常不超过2000行 - **方法最大行数**:通常不超过150-300行 - **参数数量**:最多7-9个(超出考虑封装为对象) - **if嵌套深度**:最多3-4层(超出考虑提取方法) --- ## 4. 注释规范 ### 类级Javadoc ```java /** * 用户服务类 * *
提供用户注册、登录、信息管理等核心功能
* * @author authorName * @since 2024-01-01 */ ``` ### 方法级Javadoc ```java /** * 根据用户ID获取用户信息 * * @param userId 用户ID * @return 用户信息,不存在返回null * @author authorName * @since 2024年1月1日 00:00:00 */ public User getUserById(String userId) { } ``` ### 字段注释 ```java /** 用户ID */ private String userId; ``` ### 行内注释 - 注释放在代码上方或行尾 - 复杂业务逻辑需注释说明 --- ## 5. 异常处理 ### 异常使用原则 - 业务异常使用自定义异常(如 `BusinessException`) - 参数校验异常使用 `IllegalArgumentException` 或专用校验异常 - 系统异常使用 `RuntimeException` 包装 ### 全局异常处理 ```java @ControllerAdvice @RestController public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public Result> handleBusinessException(BusinessException e) { return Result.error(e.getCode(), e.getMessage()); } } ``` ### 日志记录 ```java log.info("用户登录成功,userId={}", userId); log.warn("订单处理超时,orderId={}", orderId); log.error("数据库连接失败", e); ``` --- ## 6. 常用代码模式 ### DTO/Request/Response ```java @Data @Accessors(chain = true) public class UserDTO implements Serializable { @NotBlank(message = "用户名不能为空") private String username; @NotNull(message = "年龄不能为空") @Min(value = 0, message = "年龄不能为负数") private Integer age; } ``` ### Entity ```java @Data @Entity @Table(name = "t_user") public class User implements Serializable { @Id @GeneratedValue(strategy = GenerationType.UUID) private String id; @Column(name = "username") private String username; } ``` ### Service ```java public interface IUserService { User getUserById(String userId); } @Service @RequiredArgsConstructor public class UserServiceImpl implements IUserService { private final IUserMapper userMapper; @Override public User getUserById(String userId) { return userMapper.selectById(userId); } } ``` ### Controller ```java @RestController @RequestMapping("/users") @RequiredArgsConstructor public class UserController { private final IUserService userService; @GetMapping("/{id}") public Result