JVM 不能直接運行你寫的代碼。它只知道如何執行用字節碼編寫的程序。字節碼是一種接近機器碼的低級語言。

對於 Java,編譯是將用 Java 編寫的(高級)程序翻譯成用字節碼編寫的相同程序。

您的代碼在 .java 文件中傳遞給編譯器。如果編譯器在代碼中沒有發現錯誤,那麼你會得到一個新的字節碼文件。該文件將具有相同的名稱但擴展名不同:.class。如果代碼中有錯誤,那麼編譯器會告訴你“程序沒有編譯”。然後您需要閱讀每條錯誤消息並修復錯誤。

您使用 javac 命令調用編譯器,它是 JDK(Java 開發工具包)的一部分。這意味著如果您只安裝 JRE(Java 運行時環境),那麼您將沒有編譯器!您將只有 JVM,它只能運行字節碼。所以我們安裝 JDK 並將我們的.java文件傳遞給編譯器。

例如,讓我們來看一個帶有一些控制台輸出的簡單程序:

class MySolution {
   public static void main(String[] args) {
      System.out.println("Hi, command line!");
   }
}

讓我們將此代碼保存到文件D:/temp/MySolution.java中。

讓我們使用命令編譯我們的代碼

D:\temp>javac MySolution.java

如果代碼中沒有編譯錯誤,臨時文件夾中將出現一個MySolution.class文件。更重要的是,包含您的代碼的MySolution.java文件不會去任何地方。它仍然在原處。但是現在MySolution.class包含字節碼並且可以直接由 JVM 運行。

我們的示例盡可能簡單,但即使是最大和最複雜的項目也使用javac命令。因此,了解它的工作原理對您非常有用。

您一次可以編譯多個類。例如,假設在temp文件夾中有另一個文件Cat.java

D:\temp>javac MySolution.java Cat.java

或這個:

D:\temp>javac *.java

編譯後的.class文件可以打包成jar文件,方便移動到不同的電腦上運行。以下是如何創建jar文件的示例:

D:\temp>jar cvfe myjar.jar MySolution MySolution.class Cat.class

在哪裡:

  • jar是創建.jar文件的命令,包含在JDK中

  • cvfe是命令行選項,含義如下:

    • c – 創建一個新的jar文件

    • v – 顯示詳細信息

    • f – 表示我們希望將工具的輸出放入文件 ( myjar.jar )

    • e - 表示入口點(MySolution ),即包含主要方法的類

  • MySolution.java Cat.class – 將打包到jar文件中的文件的空格分隔名稱。

下面是我們如何運行生成的jar文件:

D:\temp>java -jar myjar.jar
如需更多詳細信息:
javac和jar工具有內置的幫助要顯示它,請在命令行上運行以下命令:
  • javac--幫助
  • 罐子——幫助