Java 中的 Code review:检查什么以及如何提供反馈

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 代码审查:检查什么以及如何提供反馈



代码审查是提升软件产品质量和团队专业成长的最有效工具之一。然而,当涉及到 Java 时,许多开发者(尤其是初级开发者)要么害怕提交自己的代码进行审查,要么不知道在审查他人代码时该关注什么。在本文中,我们将详细分解在 Java 代码中具体需要检查哪些内容,以及如何提出意见,既不伤害同事的感情,又能帮助他们变得更好。



1. Java 代码中需要检查的内容:技术清单



首先想到的是语法和逻辑。但专业的审查远不止这些边界。以下是每个 Pull Request 中值得检查的关键方面。



1.1. 架构与设计

看看新的变更如何很好地融入现有架构。它是否违反了 SOLID 原则?例如,如果你看到一个类做了太多事情(上帝对象),这就有理由建议拆分它。

  • 单一职责原则(SRP):每个类应该只有一个变更的理由。
  • 依赖倒置原则(DIP):依赖抽象,而非具体实现。
  • 模式:单例、工厂或策略模式的使用应当有合理依据,而非“以防万一”地滥用。


// 不好:类同时处理逻辑和持久化public class UserService {    public void registerUser(String name) {        // 验证        // 保存到数据库        // 发送邮件    }}

// 好:关注点分离public class UserService { private final UserRepository repository; private final EmailService emailService;

public void registerUser(String name) { User user = new User(name); repository.save(user); emailService.sendWelcome(user); }}


1.2. 性能与内存管理

Java 是一种具有自动内存管理的语言,但这并不意味着可以忽略优化。检查:

  • 循环中的字符串拼接:使用 StringBuilder 或 StringBuffer。
  • 不必要的对象:在热点循环中创建临时对象。
  • 集合:选择正确的实现(例如 ArrayList 对比 LinkedList)。
  • 空指针异常:使用 Optional 或空值检查。


// 不好:内存中有数百万个字符串String result = "";for (String s : list) {    result += s;}

// 好:使用 StringBuilderStringBuilder sb = new StringBuilder();for (String s : list) { sb.append(s);}String result = sb.toString();


1.3. 错误与异常处理

Java 中的错误不总是缺陷。有时是异常使用不当。要注意:

  • 空的 catch 块:catch (Exception e) {} 是糟糕的做法。错误至少应该被记录日志。
  • 过于通用的异常:捕获 Exception 或 Throwable 是不良实践。
  • 资源流:使用 try-with-resources 实现自动关闭。


// 不好:捕获异常但不处理try {    // 一些代码} catch (Exception e) {    // 不执行任何操作}

// 好:记录日志并重新抛出异常try { // 一些代码} catch (SQLException e) { log.error("数据库操作出错", e); throw new ServiceException("执行操作失败", e);}


1.4. 测试与覆盖率

不检查测试的代码审查就像是“半生不熟”的审查。确保以下方面:

博客

书籍推荐