CodeGym /课程 /JAVA 25 SELF /代码风格与可读性,code conventions

代码风格与可读性,code conventions

JAVA 25 SELF
第 23 级, 课程 4
可用

1. 引言

在编程中,风格不是关于时尚,而是关于生存。Java 是一门常被大型团队使用的语言,如果每个人都按“各写各的”的习惯来写,项目很快就会变成一堆彼此割裂的碎片,最终可能只有作者本人能看懂(而且也不一定)。

代码风格是一组让所有人都能同样读懂代码的规则。这就像交通标志:如果视而不见,交通很快就会变成一团乱麻。

为什么这很重要?

  • 可读性:代码被阅读的频率远高于被编写。糟糕的风格就像医生潦草的字迹:谁都看不明白写了什么。
  • 可维护性:遵循规则的代码更容易修改,意外破坏的概率更低。
  • 协作:团队中每个人都应无需额外解释就能互相理解。
  • 工具:当风格统一时,自动格式化器和静态分析器的效果更好。

2. 代码风格中的主要错误(以及如何避免)

忽视缩进和花括号

错误:
没有缩进、花括号杂乱的代码让眼睛和大脑都受折磨。

if(x>0){
System.out.println("x 是正数");
}else{
System.out.println("x 不是正数");
}

正确示例:

if (x > 0) {
    System.out.println("x 是正数");
} else {
    System.out.println("x 不是正数");
}

说明:
建议每一层缩进使用四个空格(这是 Java 的标准)。除非全队另有一致约定,否则不要使用制表符(Tab)。

不合适的变量、方法和类名

错误:

int a = 5;
String s = "John";
void f() { /* ... */ }

正确示例:

int age = 5;
String userName = "John";
void printReport() { /* ... */ }

说明:
命名应当有意义并能反映变量或方法的意图。

  • 类名:首字母大写,CamelCase,例如:UserAccount。
  • 方法与变量名:首字母小写,camelCase,例如:calculateSalary、userList。

过长的方法与类

错误:
100 行的方法、1000 行的类——对维护来说简直是 nightmare mode。

正确示例:
每个方法只做一件事且尽量短(最好一屏能看完)。类也不要膨胀到《战争与和平》的体量。

示例:

不好:

public void processOrder() {
    // 200 行代码
}

好:

public void processOrder() {
    validateOrder();
    calculateTotal();
    saveToDatabase();
    sendEmailConfirmation();
}

使用“魔法数字”和字符串

错误:

if (status == 42) {
    // ...
}

正确示例:

public static final int STATUS_APPROVED = 42;

if (status == STATUS_APPROVED) {
    // ...
}

说明:
不要使用“魔法”的数字与字符串,改用常量(static final)。在较新的 Java 版本中还有 enum —— 对于受限取值集合请使用它们。

注释:缺失或过度

错误 1:
完全没有注释——复杂代码让人摸不着头脑。

错误 2:
对每一个动作都写注释,哪怕是显而易见的。

// 将 x 增加 1
x = x + 1;

// 检查 x 是否等于 10
if (x == 10) {
    // ...
}

这类注释只会添乱!只对复杂或不明显的地方进行注释。理想情况下,好的代码无需注释也能读懂——注释应解释“为什么”,而不是“做了什么”。

// 考虑 VIP 客户的折扣
double total = calculateTotalWithDiscount();

3. Java 的约定:专业人士如何书写

Java 中有官方与事实上的代码格式标准。Oracle Java Code Conventions 和 Google Java Style Guide 是最流行的两套。

缩进与花括号

开括号与声明在同一行:

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

嵌套层级使用四个空格。

命名

  • 类与接口: 首字母大写的 CamelCase(Person、UserAccount)。
  • 方法与变量: 首字母小写的 camelCase(calculateSalary、userList)。
  • 常量: 全部大写并以下划线分隔(MAX_SIZE、DEFAULT_TIMEOUT)。
  • 包名: 仅小写,可用点分隔(com.example.project)。

空格

在运算符两侧以及逗号之后添加空格:

int sum = a + b;
System.out.println(name, age);

不要在开括号后与闭括号前添加空格:

if (x > 0) { ... }

行长度

建议每行不超过 100–120 个字符。(是的,你的显示器很大,但代码在不横向滚动时更易读。)

类成员声明顺序

推荐顺序(来自 Oracle):

  1. 字段(先静态的,再普通的)
  2. 构造函数
  3. 方法

示例:

public class User {
    private static int userCount;
    private String name;

    public User(String name) {
        this.name = name;
        userCount++;
    }

    public String getName() {
        return name;
    }
}

4. 示例:重构糟糕风格的代码

下面是一个你可能在“野外”遇到的类:

class Person{String n;int a;void p(){System.out.println(n+" "+a);}}

某个办公室里,已经有一位 Java 开发者为这段代码流下了眼泪。

让我们把它优化一下:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void print() {
        System.out.println(name + " " + age);
    }
}

发生了什么变化:

  • 类与成员使用了正确的访问修饰符。
  • 命名有意义、易读。
  • 每个类成员单独起一行。
  • 使用构造函数进行初始化。
  • 字段设为 private,以遵循封装。

5. 实用细节

自动格式化器

现代 IDE(IntelliJ IDEA、Eclipse、VS Code)可以按标准自动格式化代码。

快捷键:

  • IntelliJ IDEA: Ctrl + Alt + L
  • Eclipse: Ctrl + Shift + F

静态分析

Checkstyle、SonarLint、PMD 等工具能够在程序运行之前就发现风格违规和潜在错误。

实际表现:

  • 如果你把变量命名为 x 而不是 userAge,Checkstyle 会提出警告。
  • 如果方法过长或者类违背了 SOLID 原则,SonarLint 会给出提示。

职责分离与“整洁”代码

  • 每个类应只负责一个职责(Single Responsibility Principle)。
  • 不要害怕创建额外的类和方法——这不是“臃肿”,而是对未来读者的照顾。
  • 尽量避免重复代码:如果看到两个类似的片段——把它们抽取到单独的方法中。

常量与“魔法数字”:正确做法

不要这样:

double price = 100 * 0.18;

更好:

public static final double VAT_RATE = 0.18;
double price = 100 * VAT_RATE;

如果经常出现固定的取值集合——请使用 enum:

public enum Status {
    NEW, IN_PROGRESS, DONE
}

6. 代码风格与可读性的常见错误

错误 1:忽视代码规范。
如果团队没有统一的风格,代码很快会变得难以阅读并且难以维护。即使你独自编写,一年后你也会感谢现在的自己。

错误 2:名字过短/过长。
变量 a 或 temp —— 不好。变量 theCurrentUserNameThatIsUsedForAuthorizationInTheSystem —— 也不建议。找到平衡:userName、age、bookList。

错误 3:“魔法数字”。
把数字和字符串直接写进代码会妨碍维护并增加出错概率。

错误 4:巨型方法与类。
方法越大越难测试与理解。请拆分为逻辑更清晰的部分。

错误 5:糟糕的类结构。
字段随处散落、方法顺序杂乱——都让人很难快速定位需要的地方。

错误 6:过度或缺失的注释。
在 int x = 0; 旁边写“初始化变量”的注释没有必要。解释复杂业务逻辑的注释则非常必要。

错误 7:不一致的格式化。
项目一处用四个空格、另一处用制表符,这里花括号另起一行,那里却不换行。这看起来邋遢,也会惹恼同事。

1
任务
JAVA 25 SELF, 第 23 级, 课程 4
已锁定
整理运行中的代码 🧹
整理运行中的代码 🧹
1
任务
JAVA 25 SELF, 第 23 级, 课程 4
已锁定
清晰的命名以提升系统可读性 💬
清晰的命名以提升系统可读性 💬
1
任务
JAVA 25 SELF, 第 23 级, 课程 4
已锁定
税率:不再使用 "魔法数字"!💸
税率:不再使用 "魔法数字"!💸
1
任务
JAVA 25 SELF, 第 23 级, 课程 4
已锁定
为您的产品构建理想结构 📦
为您的产品构建理想结构 📦
1
调查/小测验
OOP — 常见错误第 23 级,课程 4
不可用
OOP — 常见错误
OOP — 常见错误
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION