本文目录导读:

Java文件的命名结构规范主要遵循以下核心原则和最佳实践,以确保代码的可读性、可维护性和团队协作效率。
核心命名规则
文件名必须与公共类名完全一致
- 每个Java文件只能包含一个
public类(或接口),文件名必须与该类名相同,区分大小写。 - 示例:
UserService.java文件内只能有一个public class UserService。
严格遵循大小写
- Java文件名区分大小写,
UserService.java和userservice.java是不同的文件。 - 类名采用大驼峰命名法(PascalCase),文件名必须完全匹配类名的大小写。
文件扩展名必须为 .java
- 所有Java源文件必须以
.java编译后生成对应的.class字节码文件。
文件与类名的对应关系
| 文件类型 | 典型文件名示例 | 对应的类/接口/枚举/注解声明 |
|---|---|---|
| 普通类 | UserService.java |
public class UserService |
| 抽象类 | AbstractUserService.java |
public abstract class AbstractUserService |
| 接口 | UserRepository.java |
public interface UserRepository |
| 枚举 | UserRole.java |
public enum UserRole |
| 注解 | MyAnnotation.java |
@interface MyAnnotation |
包(Package)目录结构
Java文件的存放位置必须与其包声明一致,形成完整的目录结构。
包名规范
- 全小写字母,使用反向域名作为根包名。
- 示例:
com.example.project.module - 禁止使用下划线、连字符,用点号分隔层级。
目录路径示例
src/
└── main/
└── java/
└── com/
└── example/
└── project/
├── controller/
│ └── UserController.java
├── service/
│ ├── UserService.java
│ └── impl/
│ └── UserServiceImpl.java
├── repository/
│ └── UserRepository.java
├── model/
│ ├── entity/
│ │ └── User.java
│ └── dto/
│ └── UserDTO.java
└── config/
└── AppConfig.java
包声明与目录一致的示例
// 文件路径: src/main/java/com/example/project/controller/UserController.java
package com.example.project.controller;
public class UserController {
// 类内容
}
常见业务模块的命名惯例
| 模块类型 | 推荐文件名 | 说明 |
|---|---|---|
| 控制层 | UserController.java |
REST API 控制器 |
| 服务层接口 | UserService.java |
业务逻辑接口 |
| 服务层实现 | UserServiceImpl.java |
接口实现类,加 Impl 后缀 |
| 数据访问层 | UserRepository.java |
数据库操作接口(Spring Data JPA 风格) |
| 实体类 | User.java |
与数据库表映射的POJO |
| 数据传输对象 | UserDTO.java |
用于服务层间的数据传输 |
| 视图对象 | UserVO.java |
用于前端展示的视图对象 |
| 常量类 | AppConstants.java |
全局常量集合 |
| 工具类 | StringUtils.java |
静态工具方法 |
| 配置文件类 | AppConfig.java |
Spring配置类或系统配置 |
| 异常类 | BusinessException.java |
自定义业务异常 |
| 抽象基类 | AbstractBaseEntity.java |
抽象父类,通常作为其他类的共同基类 |
特殊规则与注意事项
内部类与匿名类
- 内部类不创建独立的
.java文件,它们存在于外部类的文件中。 - 编译后生成
OuterClass$InnerClass.class文件。
测试文件
- 测试类文件名通常采用
{被测试类名}Test.java格式。 - 放入相应的测试源目录(如
src/test/java)中,包路径与被测试类一致。
避免使用Java关键字或内置类名
- 不要创建名为
String.java、System.java等与JDK标准类同名的文件。
与框架规范的配合
- Spring Boot:约定大于配置,控制层用
*Controller,服务层用*Service,仓库层用*Repository。 - MyBatis:Mapper接口通常命名为
UserMapper.java。 - Lombok:不影响文件命名,但需注意
@Data等注解的类名仍遵循大驼峰。
强制检查清单
✅ 检查项:
- [ ] 文件名是否与
public类名完全一致(包括大小写) - [ ] 文件扩展名是否为
.java - [ ] 文件目录是否与
package声明完全一致(包名全小写,目录层级匹配) - [ ] 是否遵循了项目/团队的业务命名约定(如Controller、Service、Repository等)
- [ ] 是否避免了与JDK内置类重名
- [ ] 测试文件命名是否以
Test或Tests
不符合规范的示例
| ❌ 错误示例 | 原因 | ✅ 正确做法 |
|---|---|---|
userService.java |
文件名首字母小写,与大驼峰类名不匹配 | UserService.java |
UserController.java |
文件路径与包声明不一致(路径错乱) | 包路径必须与目录一致 |
User_Service.java |
含有下划线,不符合大驼峰命名 | UserService.java |
USERREPOSITORY.JAVA |
全部大写,不符合大小写规范 | UserRepository.java |
Main.java 包含 public class Test |
文件名与公共类名不匹配 | 要么改名要么移除public修饰符 |
不同项目类型的最佳实践
| 项目类型 | 包根结构示例 | 说明 |
|---|---|---|
| 标准Java应用 | com.example.app |
按功能分层:controller, service, dao等 |
| Spring Boot微服务 | com.example.userservice |
按业务划分,按模块分层 |
| Maven多模块项目 | com.example.parent(父POM)com.example.moduleA(子模块) |
每个子模块有独立的src结构 |
| Android项目 | com.example.app |
按组件分层:activity, fragment, adapter等 |
- 核心原则:文件名必须与公共类名完全一致(大小写敏感),目录结构必须与包声明完全匹配。
- 命名方式:类名采用大驼峰(PascalCase),文件名随之;包名全小写。
- 业务惯例:根据职责加后缀(Controller, Service, Repository, DTO等),实现类加
Impl后缀。 - 团队统一:在项目初期约定好文件命名规范,并使用代码检查工具(如 Checkstyle, PMD)自动校验。
遵循这些规范可以极大提升代码的可读性、可维护性,并降低团队协作中的沟通成本。