javac 命令 - 入門

簡單的例子

假設“HelloWorld.java”包含以下 Java 原始碼:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

(有關上述程式碼的說明,請參閱 Java 語言入門 。)

我們可以使用以下命令編譯上面的檔案:

$ javac HelloWorld.java 

這會生成一個名為“HelloWorld.class”的檔案,然後我們可以按如下方式執行:

$ java HelloWorld
Hello world!

這個例子需要注意的關鍵點是:

  1. 原始檔名“HelloWorld.java”必須與原始檔中的類名匹配…即 HelloWorld。如果它們不匹配,你將收到編譯錯誤。
  2. 位元組碼檔名“HelloWorld.class”對應於類名。如果你要重新命名“HelloWorld.class”,那麼當你嘗試執行它時會出現錯誤。
  3. 使用 java 執行 Java 應用程式時,提供的類名不是位元組碼檔名。

包的示例

大多數實用的 Java 程式碼使用包來組織類的名稱空間,並降低意外類名衝突的風險。

如果我們想在包呼叫 com.example 中宣告 HelloWorld 類,“HelloWorld.java”將包含以下 Java 源:

package com.example;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

此原始碼檔案需要儲存在目錄樹中,其結構對應於程式包命名。

.    # the current directory (for this example)
|
 ----com
     |
      ----example
          |
           ----HelloWorld.java

我們可以使用以下命令編譯上面的檔案:

$ javac com/example/HelloWorld.java 

這會生成一個名為“com / example / HelloWorld.class”的檔案; 即編譯後,檔案結構應如下所示:

.    # the current directory (for this example)
|
 ----com
     |
      ----example
          |
           ----HelloWorld.java
           ----HelloWorld.class

然後我們可以按如下方式執行應用程式:

$ java com.example.HelloWorld
Hello world!

此示例中需要注意的其他要點是:

  1. 目錄結構必須與包名稱結構匹配。
  2. 執行該類時,必須提供完整的類名; 即“com.example.HelloWorld”而不是 HelloWorld
  3. 你不必從當前目錄編譯和執行 Java 程式碼。我們這裡只是為了說明而做。

使用’javac’一次編譯多個檔案

如果你的應用程式包含多個原始碼檔案(大多數都是!),你可以一次編譯一個。或者,你可以通過列出路徑名來同時編譯多個檔案:

$ javac Foo.java Bar.java

或使用命令 shell 的檔名萬用字元功能….

$ javac *.java
$ javac com/example/*.java
$ javac */**/*.java #Only works on Zsh or with globstar enabled on your shell

這將編譯當前目錄中“com / example”目錄中的所有 Java 原始檔,並分別在子目錄中遞迴編譯。第三種方法是提供原始檔名(和編譯器選項)列表作為檔案。例如:

$ javac @sourcefiles

sourcefiles 檔案包含的位置:

Foo.java
Bar.java
com/example/HelloWorld.java

注意:編譯這樣的程式碼適用於小型單人專案和一次性程式。除此之外,建議選擇和使用 Java 構建工具。或者,大多數程式設計師使用 Java IDE(例如 NetBeanseclipseIntelliJ IDEA ),它提供嵌入式編譯器和專案的增量構建。

常用的’javac’選項

以下是 javac 命令的一些選項,可能對你有用

  • -d 選項設定用於編寫“.class”檔案的目標目錄。
  • -sourcepath 選項設定原始碼搜尋路徑。
  • -cp-classpath 選項設定用於查詢外部和以前編譯的類的搜尋路徑。有關類路徑以及如何指定它的更多資訊,請參閱類路徑主題。
  • -version 選項列印編譯器的版本資訊。

將在單獨的示例中描述更完整的編譯器選項列表。

參考

javac 命令的權威參考是 javacOracle 手冊頁