首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 編譯器 (javac) 完整指南:參數、源文件處理與類型搜尋機制

     編輯:Java 相關知識

命令概覽

javac [options] [sourcefiles] [@files]
oldjavac [options] [sourcefiles] [@files]

參數順序任意。options 為命令行選項,sourcefiles 為一或多個源文件,@files 為包含源文件列表的文件(每行一個文件名)。

基本工作原理

javac 讀取 Java 類與介面定義,編譯為字節碼 .class 文件。源文件必須以 .java 結尾,類文件以 .class 結尾,文件名需與類名一致(如 MyClass.java → MyClass.class)。內部類會產生 Outer$Inner.class 形式的文件。

源文件目錄結構

源文件應置於反映套件結構的目錄下。例如源碼根目錄為 /workspace,則 com.mysoft.mypack.MyClass 應位於 /workspace/com/mysoft/mypack/MyClass.java。Windows 下同理(如 c:\workspace\com\mysoft\mypack\MyClass.java)。

預設情況下,.class 輸出至源文件同目錄;可用 -d 選項指定目標目錄。

源文件傳遞方式

  • 文件較少:直接在命令行列出文件名。
  • 文件較多:將文件名寫入一個文件(空格、Tab 或換行分隔),命令行用 @filename 引用。
    例:javac @sourcefiles 其中 sourcefiles 內容為:
    MyClass1.java
    MyClass2.java
    MyClass3.java

類型搜尋與依賴處理

編譯時需獲取所有被使用、繼承、實現的類/介面類型資訊(含繼承鏈上的祖先類)。搜尋順序:

  1. Bootstrap 與 Extension 類(通常無需關心,除非用 -bootclasspath、-extdirs 覆蓋)。
  2. 用戶類路徑:由 CLASSPATH 環境變數或 -classpath 選項指定。
  3. 源文件路徑:若指定 -sourcepath 則在該路徑找源文件;否則在用戶類路徑同時尋找 .class 與 .java。

搜尋結果處理邏輯

情況javac 行為
僅找到 .class直接使用該類文件
僅找到 .java編譯源文件,再使用生成的類文件
兩者皆存在比較修改時間(或用 -Xdepend 深度依賴檢查),過期則重編譯,否則用現有 .class

注意:javac 會靜默編譯命令行未指定但被依賴的文件;用 -verbose 可追蹤自動編譯過程。

常用標準選項速查

  • -d <dir>:指定類文件輸出目錄
  • -classpath <path> / -cp <path>:覆蓋 CLASSPATH
  • -sourcepath <path>:指定源文件搜尋路徑
  • -bootclasspath <path>:覆蓋 Bootstrap 類路徑
  • -extdirs <dirs>:覆蓋 Extension 目錄
  • -encoding <encoding>:指定源文件編碼
  • -g / -g:none / -g:{lines,vars,source}:控制除錯資訊生成
  • -nowarn:關閉警告
  • -verbose:輸出詳細編譯日誌
  • -Xdepend:啟用深度依賴檢查(較慢但可靠)
  • -Xlint[:key]:啟用推薦警告

非標準選項以 -X 開頭,屬於當前實現專用,未來版本可能變更。

交叉編譯選項

  • -target <version>:生成指定版本字節碼(如 1.4、1.5)
  • -source <version>:指定源碼語言版本
  • -bootclasspath、-extdirs:配合交叉編譯使用,確保運行時環境一致

最佳實踐建議

  1. 大型專案務必使用 @files 管理源文件列表,避免命令行過長。
  2. 嚴格遵循套件目錄結構,配合 -d 輸出至獨立 build 目錄,便於打包部署。
  3. 持續整合環境建議開啟 -Xlint -Xdepend,及時發現潛在問題。
  4. 跨 JDK 版本編譯時,務必同時設定 -source、-target、-bootclasspath,避免運行時 UnsupportedClassVersionError。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved