Skip to content

代码格式化规范

良好的代码格式化可以提高代码可读性和可维护性。

缩进与空格

缩进

使用 4 个空格作为缩进,不要使用 Tab:

java
// 正确:4 空格缩进
public void method() {
    if (condition) {
        doSomething();
    }
}

// 错误:Tab 或不统一
public void method() {
if (condition) {
→   →   doSomething();
→   }
}

空行使用

java
public class Example {
    // 类的成员之间用一个空行分隔
    
    private String name;
    
    private int age;
    
    public Example() {
    }
    
    public void method1() {
    }
    
    // 方法之间用两个空行分隔
    
    public void method2() {
    }
}

空格使用

java
// 正确:运算符两侧加空格
int sum = a + b;
if (a == b) { }
for (int i = 0; i < 10; i++) { }

// 错误
int sum=a+b;
if (a==b) { }
for (int i=0;i<10;i++) { }

// 正确:逗号后面加空格
method(arg1, arg2, arg3);

// 正确:分号后面加空格(在 for 循环中)
for (int i = 0; i < 10; i++) { }

// 错误:逗号/分号前面加空格
method(arg1 , arg2);
for (int i = 0 ; i < 10 ; i++) { }

// 正确:方法调用不加空格
method(arg1, arg2);

// 错误
method (arg1, arg2);

// 正确:括号内侧不加空格
if (condition) { }
method(args);

// 错误
if ( condition ) { }
method( args );

大括号

K&R 风格(推荐)

左大括号与声明同行,右大括号单独一行:

java
public void method() {
    if (condition) {
        doSomething();
    } else {
        doOther();
    }
}

// 类和接口
public class MyClass {
    public interface MyInterface {
        void method();
    }
}

大括号可选情况

单行语句可以省略大括号,但不推荐:

java
// 不推荐:省略大括号
if (condition)
    doSomething();

// 推荐:始终使用大括号
if (condition) {
    doSomething();
}

行长度

建议每行不超过 120 个字符:

java
// 正确:拆分长行
public void longMethodName(String parameter1, String parameter2,
                           int parameter3, int parameter4) {
    // ...
}

// 正确:使用局部变量减少行长度
String fullName = user.getFirstName() + " " + user.getLastName();
log.info("User {} logged in from {}", fullName, ipAddress);

换行

方法链换行

java
// 正确:基于最后一个点换行
List&lt;String&gt; filtered = users.stream()
    .filter(u -> u.isActive())
    .map(User::getName)
    .collect(Collectors.toList());

// 正确:基于操作符换行
int sum = firstValue 
        + secondValue 
        + thirdValue;

参数换行

java
// 正确:4 空格缩进
public void method(
        String param1,
        String param2,
        int param3) {
    // ...
}

// 正确:参数对齐
public void method(String param1,
                   String param2,
                   int param3) {
    // ...
}

import 语句

顺序

  1. Java SE 包(java.*)
  2. javax.* 包
  3. 第三方包
  4. 当前项目包
java
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CompletableFuture;

import javax.servlet.http.HttpServlet;

import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Bean;

import com.example.model.User;
import com.example.service.UserService;

通配符

可以使用通配符导入同包的多个类,但不要导入过多的类:

java
// 正确
import java.util.*;

声明规范

类和接口

一个文件中通常只放一个公共类。类的声明顺序:静态变量 → 实例变量 → 构造器 → 方法。

java
public class UserService {
    // 静态变量
    private static final Logger log = LoggerFactory.getLogger(UserService.class);
    
    // 实例变量
    private UserRepository userRepository;
    
    // 构造器
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    // 公共方法
    public User findById(Long id) {
        return userRepository.findById(id);
    }
    
    // 私有方法
    private void validate(User user) {
        // ...
    }
}

变量声明

java
// 正确:每行声明一个变量
private String name;
private String email;
private int age;

// 错误:一行声明多个变量
private String name, email, address;

// 正确:声明时初始化
private int count = 0;
private List&lt;String&gt; list = new ArrayList&lt;&gt;();

方法规范

方法顺序

同类方法按以下顺序排列:公共方法 → 保护方法 → 私有方法 → getter/setter

java
public class Service {
    // 公共方法
    public void publicMethod() { }
    
    // 保护方法
    protected void protectedMethod() { }
    
    // 私有方法
    private void privateMethod() { }
    
    // getter/setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

方法参数

java
// 正确:参数名有意义
public List&lt;User&gt; findUsersByAgeAndCity(int age, String city) {
    // ...
}

// 正确:参数过多时换行
public void createOrder(
        String orderId,
        String userId,
        List&lt;OrderItem&gt; items,
        BigDecimal totalAmount,
        String remark) {
    // ...
}

控制结构

if-else

java
// 正确:简单的 if 可以一行
if (condition) return;

// 正确:标准格式
if (condition) {
    doSomething();
} else if (anotherCondition) {
    doOther();
} else {
    doDefault();
}

// 错误:嵌套过深
if (condition1) {
    if (condition2) {
        if (condition3) {
            doSomething();
        }
    }
}

for 循环

java
// 正确:标准 for 循环
for (int i = 0; i < list.size(); i++) {
    process(list.get(i));
}

// 正确:for-each 循环
for (String item : items) {
    process(item);
}

// 错误:循环内操作过多
for (int i = 0; i < 100; i++) {
    User user = new User();
    user.setName("User" + i);
    user.setAge(i % 100);
    user.setEmail("user" + i + "@example.com");
    user.setPhone("1234567890" + i);
    user.setAddress("Address " + i);
    userRepository.save(user);
}

基于 VitePress 构建