命名规范
良好的命名规范是提高代码可读性的重要手段。本文详细介绍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 - Return6.3 缩写规范
缩写使用:
java
// ✅ 好的缩写(通用缩写)
public class URLUtil {
// ...
}
public class HTMLParser {
// ...
}
public class IDGenerator {
// ...
}
// ❌ 不好的缩写(不通用)
public class UsrSvc { // 应该写全称UserService
// ...
}📖 学习资源
官方规范
书籍推荐
- 《代码整洁之道》 - Robert C. Martin
✅ 学习检查清单
- [ ] 已掌握类命名规范
- [ ] 已掌握方法命名规范
- [ ] 已掌握变量命名规范
- [ ] 已掌握常量命名规范
- [ ] 已了解包命名规范
- [ ] 已养成规范的命名习惯