Java 格式化工具
什麼是 Java 格式化?
Java 格式化工具會用一致的縮排、換行和結構整理 Java 程式碼,讓類別、方法、區塊、泛型、註解和控制流程更容易閱讀。它適合處理複製來的片段、產生程式碼、程式碼審查準備、教學範例,以及因編輯器設定不同而風格混亂的檔案。格式化能提升可讀性和團隊協作,但不會自動修復業務邏輯、編譯錯誤、缺少 import、API 誤用或專案特定風格規則。在正式存放庫中使用前,應與團隊 formatter、建置工具或 CI 規範對齊,避免一次格式化製造大量無意義 diff。
使用方式
使用方式
- 將 Java 程式碼貼入或輸入左側輸入框
- 選擇縮排大小(2 空格、4 空格或 Tab 鍵)
- 點選「格式化」美化程式碼,或「壓縮」進行縮減
- 在右側查看結果(帶有語法高亮)
- 點選「複製」複製到剪貼簿
選項說明
程式碼提示
- 格式化可提高可讀性,但不會編譯或檢查 Java 程式碼類型,因此編輯後請執行正常的構建或 IDE 檢查。
- 壓縮 Java 原始碼對生產構建用處不大;為便於審查、堆疊追蹤和未來維護,請保留易讀的格式。
使用場景
技術原理
Java 格式化建立在詞法分析與 AST 建構之上。詞法掃描器逐字元讀取原始碼,產生詞法單元(token):關鍵字(class、public、static 及其他保留字)、識別字(變數和類別名稱)、字面值(數字、字串、字元)、運算子(+、-、==、&& 等)、分隔符({ } ( ) ; ,)以及註解(//、/* */)。 解析器依照 Java 語言規範(JLS)將詞法單元流轉換為抽象語法樹(AST),識別類別定義、方法主體、陳述式區塊、控制流程結構、註解及其他語法單元。格式化器遍歷 AST,按照風格指南(如 Google Java Style)重新產生程式碼:縮排隨區塊深度遞增,行寬上限為 100 列,運算子兩側加空格,逗號後加空格,左大括號保持在同一行(K&R 風格)。 註解處理是 Java 格式化中的特殊情況:單個註解與方法同行顯示;較長的註解清單則跨行排列,按參數對齊,每個註解各佔一行。
- 詞法分析:識別 Java 的 50 個關鍵字、識別字、字面值、運算子和註解,輸出詞法單元流。
- AST 建構:依照 JLS 規則建立 AST,正確處理類別、方法、控制流程、lambda 和 try-with-resources。
- 縮排規則:Google 風格預設每層 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 class、switch 表達式、文字區塊(text block)以及模式比對都是較新的功能;舊版解析器可能無法處理。先試一段程式碼——能順利格式化就沒問題;如果報錯,請檢查解析器版本。
會修正 import 或未使用的變數嗎?
不會。格式化只會調整空白與大括號位置。整理 import、移除未使用變數等靜態分析需要真正的 IDE,或像 google-java-format 開啟 --skip-removing-unused-imports off 等工具。
原始碼會被上傳嗎?
不會。格式化是透過 JS 版本的 Java 解析器在瀏覽器內完成,程式碼不會傳出去。如果你的安全政策禁止任何網路工具接觸專屬程式碼,請避免貼上。
結果會跟 IntelliJ 或 Eclipse 一樣嗎?
不太可能完全一致。每個 IDE 都有自己的格式化器,選項多達上千個。本工具適合臨時格式化;想維持團隊一致,請改用可在 CI 強制執行的工具,例如把 google-java-format 或 Spotless 整合到建置流程中。
可以壓縮(minify)Java 嗎?
Java 是編譯型語言——並不像 JS 那樣有「壓縮」的概念。class 檔案最佳化是編譯器與 ProGuard 在建置時做的事。本頁面只負責原始碼層級的格式化。
為什麼我的程式碼多了空行?
許多風格指南要求類別成員或方法之間留一行空白。格式化器會依規範補上空行。如果你偏好較緊湊的版面,請覆寫對應的風格選項。