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工具有內置的幫助。要顯示它,請在命令行上運行以下命令:
|
GO TO FULL VERSION