Java 格式化工具
什么是 Java 格式化?
Java 格式化工具会用一致的缩进、换行和结构整理 Java 代码,让类、方法、代码块、泛型、注解和控制流程更容易阅读。它适合处理复制来的片段、生成代码、代码评审准备、教学示例,以及因编辑器设置不同而风格混乱的文件。格式化能提升可读性和团队协作,但不会自动修复业务逻辑、编译错误、缺失 import、API 误用或项目特定风格规则。在生产仓库中使用前,应与团队 formatter、构建工具或 CI 规范对齐,避免一次格式化制造大量无意义 diff。
使用方法
使用方法
- 在左侧输入框粘贴或输入 Java 代码
- 选择缩进大小(2 空格、4 空格或 Tab)
- 点击「格式化」美化代码,或点击「压缩」缩减代码
- 在右侧查看结果(支持语法高亮)
- 点击「复制」将结果复制到剪贴板
选项说明
代码提示
- 格式化可提升可读性,但不会编译或进行类型检查,编辑后请执行常规构建或 IDE 检查。
- Java 源码压缩在生产构建中极少使用;建议保留可读格式,方便代码审查、堆栈追踪及后续维护。
使用场景
技术原理
Java 格式化建立在词法分析和 AST 构建之上。词法分析器逐字符扫描源码并生成 Token 流:关键字(class、public、static 等保留字)、标识符(变量名和类名)、字面量(数字、字符串、字符)、运算符(+、-、==、&& 等)、分隔符({ } ( ) ; ,)以及注释(//、/* */)。 解析器按照 Java 语言规范(JLS)将 Token 流转换为抽象语法树(AST),识别类定义、方法体、语句块、控制流结构、注解和其他语法单元。格式化器遍历 AST,按照 Google Java Style 等风格指南重新生成代码:缩进随块深度递增,行宽限制在 100 列,运算符两侧加空格,逗号后跟空格,左大括号不换行(K&R 风格)。 注解处理是 Java 格式化中的特殊情况:单个注解与方法同行;较长的注解列表按参数对齐换行,每个注解独占一行。
- 词法分析:识别 50 个 Java 关键字、标识符、字面量、运算符和注释,输出 Token 流。
- AST 构建:按 JLS 规则构建 AST,正确处理类、方法、控制流、Lambda 表达式和 try-with-resources。
- 缩进规则:Google Style 默认每级 4 空格,行宽限制 100 列;超出限制的行自动换行。
- 换行策略:较长的方法链、参数列表和注解在逗号或点号处换行,续行与上一行首个字符对齐。
- 注解处理:单个注解保持同行;多个注解可在一行或每行一个,取决于长度和参数对齐规则。
- 注释保留:保持 // 和 /* */ 注释在原始位置;压缩模式下可选择移除。
示例
格式化类定义
输入: public class User{private Long id;private String name;public User(Long id,String name){this.id=id;this.name=name;}}
输出:
public class User {
private Long id;
private String name;
public User(Long id, String name) {
this.id = id;
this.name = name;
}
}格式化方法链
输入: List<String> result=list.stream().filter(s->s.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());
输出:
List<String> result = list.stream()
.filter(s -> s.startsWith("a"))
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());注解换行
输入: @Override public ResponseEntity<User> getUser(@PathVariable Long id,@RequestParam(defaultValue="10") int size){...}
输出:
@Override
public ResponseEntity<User> getUser(
@PathVariable Long id,
@RequestParam(defaultValue = "10") int size) {
...
}常见问题
使用的是哪种 Java 风格?
常见默认是 Google Java Style 或 Sun/Oracle 约定:4 空格缩进、K&R 大括号风格、100 列行宽。部分版本会提供切换风格的选项。任何风格指南的细节都很微妙——运行格式化、看输出、再锁定一份配置。
格式化器支持现代 Java 吗?
取决于解析器版本。records、sealed 类、switch 表达式、文本块和模式匹配都是较新的语法,老解析器可能不支持。试一段代码——能干净格式化就没问题;如果报错,请检查解析器版本。
它会修复 import 或未使用的变量吗?
不会。格式化只调整空白和大括号位置。静态分析(整理 import、删除未使用项)需要真正的 IDE 或像 google-java-format 这样的工具(关闭 --skip-removing-unused-imports)。
源代码会被上传吗?
不会。格式化通过基于 JS 的 Java 解析器在你的浏览器中运行,代码不会被传输。如果安全策略禁止把任何专有代码暴露给在线工具,请避免粘贴。
结果会和 IntelliJ 或 Eclipse 一致吗?
很可能不完全一致。每个 IDE 都有自己的格式化器和成千上万的选项。本页适合临时格式化;为了团队一致,请用 google-java-format 或 Spotless 等工具接入 CI 强制执行。
能压缩 Java 吗?
Java 是编译型语言——压缩在这里不像 JS 那样适用。class 文件优化是编译器和 ProGuard 在构建时做的事。本页只做源码级别的格式化。
为什么我的代码被加了空行?
许多风格指南要求类成员之间或方法之间留一个空行。格式化器会按规则插入。如果你偏好紧凑代码,请覆盖相关风格选项。