Skip to content

命名规范 ​

良好的命名规范是提高代码可读性的重要手段。本文详细介绍Java编码中的命名规范和最佳实践。

📋 命名规范概览 ​

🎯 一、类命名规范 ​

1.1 普通类命名 ​

类名规范:

java
// ✅ 好的命名:大驼峰,名词,具有描述性
public class UserService {
    // ...
}

public class OrderController {
    // ...
}

public class PaymentProcessor {
    // ...
}

// ❌ 不好的命名
public class user {  // 应该大写开头
    // ...
}

public class DoSomething {  // 类名应该是名词
    // ...
}

public class A {  // 没有意义
    // ...
}

命名建议:

  • 使用大驼峰(PascalCase)
  • 使用名词或名词短语
  • 具有描述性,能清晰表达类的用途
  • 避免缩写(除非是通用缩写如URL、ID等)

1.2 接口命名 ​

接口命名:

java
// ✅ 好的命名
public interface UserRepository {
    // ...
}

public interface PaymentService {
    // ...
}

// 也可以使用I前缀(但不推荐)
public interface IUserService {
    // ...
}

// 形容词接口(表示能力)
public interface Serializable {
    // ...
}

public interface Comparable<T> {
    // ...
}

1.3 抽象类命名 ​

java
// 抽象类命名
public abstract class AbstractUserService {
    // ...
}

public abstract class BaseController {
    // ...
}

1.4 枚举命名 ​

java
// ✅ 好的枚举命名
public enum OrderStatus {
    PENDING,
    PROCESSING,
    COMPLETED,
    CANCELLED
}

public enum UserRole {
    ADMIN,
    USER,
    GUEST
}

// 枚举值是全大写下划线分隔

1.5 异常类命名 ​

java
// 异常类以Exception结尾
public class UserNotFoundException extends RuntimeException {
    // ...
}

public class ValidationException extends Exception {
    // ...
}

public class BusinessException extends RuntimeException {
    // ...
}

1.6 工具类命名 ​

java
// 工具类以Util或Utils结尾
public class StringUtils {
    // ...
}

public class DateUtil {
    // ...
}

public class CollectionHelper {
    // ...
}

🎯 二、方法命名规范 ​

2.1 方法名规范 ​

方法名规范:

java
// ✅ 好的方法名:小驼峰,动词开头,具有描述性
public void getUserInfo() {
    // ...
}

public void calculateTotal() {
    // ...
}

public boolean isValid() {
    // ...
}

// ❌ 不好的命名
public void getUser() {  // 太简单,不够描述性
    // ...
}

public void doIt() {  // 没有意义
    // ...
}

2.2 常用动词 ​

常用动词前缀:

java
// get/set/is/has(访问器)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public boolean isActive() { return active; }
public boolean hasPermission() { return permission != null; }

// create/build/make(创建)
public User createUser(String name) { /* ... */ }
public User buildUser() { /* ... */ }
public List<String> makeList() { /* ... */ }

// find/search/lookup(查找)
public User findUserById(Long id) { /* ... */ }
public List<User> searchUsers(String keyword) { /* ... */ }
public User lookupUser(String username) { /* ... */ }

// save/update/delete/remove(增删改)
public void saveUser(User user) { /* ... */ }
public void updateUser(User user) { /* ... */ }
public void deleteUser(Long id) { /* ... */ }
public void removeUser(Long id) { /* ... */ }

// calculate/compute(计算)
public BigDecimal calculateTotal(List<OrderItem> items) { /* ... */ }
public int computeSum(int[] numbers) { /* ... */ }

// validate/check(验证)
public boolean validateEmail(String email) { /* ... */ }
public boolean checkPermission(Long userId, String permission) { /* ... */ }

// convert/transform(转换)
public String convertToJson(Object obj) { /* ... */ }
public User transformDtoToEntity(UserDTO dto) { /* ... */ }

2.3 布尔方法命名 ​

布尔返回值方法:

java
// ✅ 好的命名:使用is/has/should/can等前缀
public boolean isActive() { return active; }
public boolean hasPermission() { return permission != null; }
public boolean shouldRetry() { return retryCount < MAX_RETRY; }
public boolean canAccess() { return hasPermission(); }

// ❌ 不好的命名
public boolean active() { return active; }  // 缺少is前缀
public boolean permission() { return permission != null; }  // 应该是hasPermission

🎯 三、变量命名规范 ​

3.1 变量命名 ​

变量名规范:

java
// ✅ 好的变量名:小驼峰,具有描述性
String userName = "张三";
int userAge = 25;
List<Order> orderList = new ArrayList<>();
Map<String, User> userMap = new HashMap<>();

// ❌ 不好的命名
String n = "张三";  // 没有意义
int a = 25;        // 没有意义
List list = new ArrayList();  // 缺少类型信息

3.2 局部变量命名 ​

局部变量:

java
public void processOrder(Order order) {
    // 临时变量使用简短但有意义的名称
    BigDecimal total = calculateTotal(order.getItems());
    boolean isValid = validateOrder(order);
    
    // 循环变量可以使用简短名称
    for (int i = 0; i < items.size(); i++) {
        OrderItem item = items.get(i);
        // ...
    }
    
    // 增强for循环使用描述性名称
    for (OrderItem item : order.getItems()) {
        // ...
    }
}

3.3 成员变量命名 ​

成员变量:

java
public class User {
    // 私有成员变量使用小驼峰
    private String userName;
    private Integer age;
    
    // 可以添加m前缀或_前缀(团队约定)
    private String mUserName;
    private String _userName;
    
    // 但Java规范推荐不使用前缀
}

🎯 四、常量命名规范 ​

4.1 常量命名 ​

常量命名:

java
// ✅ 好的常量命名:全大写下划线分隔
public static final int MAX_SIZE = 100;
public static final String DEFAULT_NAME = "Unknown";
public static final double PI = 3.14159;

// 枚举常量
public enum OrderStatus {
    PENDING,
    COMPLETED,
    CANCELLED
}

// ❌ 不好的命名
public static final int maxSize = 100;  // 应该是大写
public static final String defaultName = "Unknown";  // 应该是大写

4.2 常量分组 ​

常量组织:

java
// 按功能分组
public class Constants {
    // 用户相关常量
    public static final int MAX_USER_NAME_LENGTH = 50;
    public static final int MIN_PASSWORD_LENGTH = 8;
    
    // 订单相关常量
    public static final int MAX_ORDER_ITEMS = 100;
    public static final BigDecimal MAX_ORDER_AMOUNT = new BigDecimal("10000.00");
    
    // 时间相关常量
    public static final int SESSION_TIMEOUT_SECONDS = 3600;
    public static final int CACHE_EXPIRE_MINUTES = 30;
}

🎯 五、包命名规范 ​

5.1 包命名 ​

包命名规范:

java
// ✅ 好的包命名:全小写,使用点分隔
package com.example.user.service;
package com.example.order.controller;
package com.example.common.util;

// ❌ 不好的命名
package com.example.UserService;  // 不应使用大写
package com.example.user_service;  // 不应使用下划线

包命名建议:

  • 全小写
  • 使用点分隔
  • 通常使用公司域名反序(如com.example)
  • 按功能模块组织

🎯 六、其他命名规范 ​

6.1 参数命名 ​

方法参数:

java
// ✅ 好的参数命名
public void createUser(String userName, Integer age, String email) {
    // ...
}

public void processOrder(Order order, PaymentInfo paymentInfo) {
    // ...
}

// ❌ 不好的命名
public void createUser(String n, Integer a, String e) {  // 缩写不清晰
    // ...
}

6.2 泛型命名 ​

泛型参数:

java
// ✅ 好的泛型命名:使用大写字母,通常单字母
public class List<T> {  // T表示Type
    // ...
}

public class Map<K, V> {  // K=Key, V=Value
    // ...
}

public interface Repository<E, ID> {  // E=Entity, ID=Identifier
    // ...
}

// 常用泛型命名
// E - Element
// T - Type
// K - Key
// V - Value
// N - Number
// R - Return

6.3 缩写规范 ​

缩写使用:

java
// ✅ 好的缩写(通用缩写)
public class URLUtil {
    // ...
}

public class HTMLParser {
    // ...
}

public class IDGenerator {
    // ...
}

// ❌ 不好的缩写(不通用)
public class UsrSvc {  // 应该写全称UserService
    // ...
}

📖 学习资源 ​

官方规范 ​

书籍推荐 ​

  • 《代码整洁之道》 - Robert C. Martin

✅ 学习检查清单 ​

  • [ ] 已掌握类命名规范
  • [ ] 已掌握方法命名规范
  • [ ] 已掌握变量命名规范
  • [ ] 已掌握常量命名规范
  • [ ] 已了解包命名规范
  • [ ] 已养成规范的命名习惯

上一章节:并发编程常用写法
下一章节:注释规范
返回目录:代码规范