跳到主要内容

Java 编码规范与最佳实践

良好的编码规范是保证代码质量的基础。理解 Java 编码规范和最佳实践是进行专业开发的关键。本章将介绍 Java 编码规范与最佳实践。

命名规范

类名

类名使用大驼峰命名(PascalCase)

// ✅ 正确
public class UserService {
}

public class OrderController {
}

// ❌ 错误
public class userService { // 首字母小写
}

public class order_controller { // 使用下划线
}

方法名和变量名

方法名和变量名使用小驼峰命名(camelCase)

// ✅ 正确
public void getUserName() {
String userName = "张三";
int userAge = 25;
}

// ❌ 错误
public void get_user_name() { // 使用下划线
String user_name = "张三";
}

常量名

常量名使用全大写下划线分隔(UPPER_SNAKE_CASE)

// ✅ 正确
public static final int MAX_SIZE = 100;
public static final String DEFAULT_NAME = "未知";

// ❌ 错误
public static final int maxSize = 100; // 不是常量命名

包名

包名使用小写字母,点分隔

// ✅ 正确
package com.example.myapp.service;

// ❌ 错误
package com.example.MyApp.service; // 包含大写

注释规范

类注释

/**
* 用户服务类
* 提供用户相关的业务逻辑处理
*
* @author 张三
* @version 1.0
* @since 2024-01-01
*/
public class UserService {
}

方法注释

/**
* 根据用户ID获取用户信息
*
* @param userId 用户ID,不能为null
* @return 用户对象,如果不存在返回null
* @throws IllegalArgumentException 如果userId为null
*/
public User getUserById(Long userId) {
if (userId == null) {
throw new IllegalArgumentException("用户ID不能为null");
}
// 实现
return null;
}

行内注释

public void processData() {
// 验证数据
if (data == null) {
return;
}

// 处理数据
process(data);
}

异常处理与性能优化

异常处理

// ✅ 推荐:捕获具体异常
try {
processFile(filename);
} catch (FileNotFoundException e) {
logger.error("文件不存在:" + filename, e);
} catch (IOException e) {
logger.error("IO错误", e);
}

// ❌ 不推荐:捕获所有异常
try {
processFile(filename);
} catch (Exception e) { // 太宽泛
e.printStackTrace();
}

// ✅ 推荐:使用 try-with-resources
try (FileInputStream fis = new FileInputStream(file)) {
// 使用资源
} catch (IOException e) {
logger.error("错误", e);
}

性能优化

// ✅ 推荐:使用 StringBuilder 拼接字符串
StringBuilder sb = new StringBuilder();
for (String str : strings) {
sb.append(str);
}
String result = sb.toString();

// ❌ 不推荐:使用 + 拼接
String result = "";
for (String str : strings) {
result += str; // 性能差
}

// ✅ 推荐:使用增强 for 循环
for (String item : list) {
process(item);
}

// ⚠️ 可以:需要索引时使用传统 for
for (int i = 0; i < list.size(); i++) {
process(list.get(i), i);
}

代码重构建议

提取方法

// ❌ 不推荐:方法过长
public void processOrder(Order order) {
// 验证订单
if (order == null) {
throw new IllegalArgumentException("订单不能为null");
}
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("订单不能为空");
}

// 计算总价
double total = 0;
for (OrderItem item : order.getItems()) {
total += item.getPrice() * item.getQuantity();
}

// 应用折扣
if (order.getDiscount() > 0) {
total = total * (1 - order.getDiscount());
}

// 保存订单
order.setTotal(total);
orderDao.save(order);
}

// ✅ 推荐:提取方法
public void processOrder(Order order) {
validateOrder(order);
double total = calculateTotal(order);
applyDiscount(order, total);
saveOrder(order);
}

private void validateOrder(Order order) {
if (order == null) {
throw new IllegalArgumentException("订单不能为null");
}
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("订单不能为空");
}
}

private double calculateTotal(Order order) {
double total = 0;
for (OrderItem item : order.getItems()) {
total += item.getPrice() * item.getQuantity();
}
return total;
}

使用常量

// ❌ 不推荐:魔法数字
if (status == 1) {
// ...
} else if (status == 2) {
// ...
}

// ✅ 推荐:使用常量
private static final int STATUS_ACTIVE = 1;
private static final int STATUS_INACTIVE = 2;

if (status == STATUS_ACTIVE) {
// ...
} else if (status == STATUS_INACTIVE) {
// ...
}

小结

Java 编码规范与最佳实践要点:

  • 命名规范:类名大驼峰,方法名小驼峰,常量全大写
  • 注释规范:类注释、方法注释、行内注释
  • 异常处理:捕获具体异常,使用 try-with-resources
  • 性能优化:使用 StringBuilder,合理使用循环
  • 代码重构:提取方法,使用常量

关键要点

  • 遵循命名规范
  • 编写清晰的注释
  • 正确处理异常
  • 注意性能优化
  • 保持代码简洁

理解了编码规范,你就能编写高质量的代码。在下一章,我们将学习常见设计模式。