.java 和 .class 之間的區別
Java 是一種獨立於平臺的程式語言。它涉及兩步執行過程,而不是像 C 語言那樣通常的一步編譯。
第一步執行使用獨立於作業系統的編譯器進行。第二步執行在虛擬機器的幫助下進行,也稱為 JVM 或 Java 虛擬機器。
在兩步執行期間,副檔名為 .java
和 .class
的檔案會形成。本文將介紹 .java
和 .class
檔案之間的基本區別。
用 Java 編寫程式的基礎知識
要理解 .java
和 .class
檔案的概念,必須知道 Java 程式是如何執行的。讓我們以下面的程式碼為例。
public class DemoProgram{
/* This is a demo Java program that will print 'Hello Java' as the output */
public static void main(String[] args){
System.out.println("Hello Java");
}
}
請按照以下步驟執行此程式。
-
在文字編輯器中編寫上述程式碼。然後,將檔案儲存為
DemoProgram.java
。請注意,檔名應與類名相同。 -
使用儲存此檔案的目錄的路徑開啟命令提示符視窗。
-
鍵入此命令 -
javac DemoProgram.java
。按回車鍵。javac
命令編譯 Java 程式。它將.java
檔案作為輸入並將其更改為位元組碼檔案。這一步開始編譯程式碼。一旦編譯成功且沒有錯誤,游標將移動到下一行。C:\Users\PC>javac DemoProgram.java
-
然後,輸入這個命令 -
java DemoJava
。我們在這裡不使用.java
的檔名。原因是java
命令將位元組碼作為輸入,並根據原始碼給出最終輸出。簡單地說,這次DemoProgram
不是一個 java 檔案而是一個位元組碼。C:\Users\PC>java DemoProgram
-
上面的命令使程式執行,你可以看到輸出為:
Hello Java
在進一步移動之前,請注意以下幾點:
-
原始碼是程式設計師用任何程式語言編寫的程式碼。我們手動編寫它以解決任何問題。
-
在 Java 中,每個程式都構成一個
類
。根據編寫程式碼的目的,一個程式中可以有多個類。就像上面的例子一樣,只有一個名為DemoProgram
的類。
我們在上面的部分中建立了一個文字檔案,並使用副檔名 .java
儲存它。這是通過編譯器的原始檔。
這會將原始碼編碼為與機器無關的編碼。這稱為 Bytecode
。
如前所述,一個程式可能有一個或多個類。因此,在編碼過程中,每個類的內容分別放在不同的 .class
檔案中。
然後這些檔案可以在任何系統上執行,因為它們獨立於機器或作業系統。
你是否看到 .java
和 .class
檔案何時出現?當我們使用此副檔名儲存原始碼時,就會形成 .java
檔案。 .class
檔案在編譯時形成。
Java 中的 .java
檔案
.java
檔案只是 Java 中的原始碼本身。
簡單地說,就是包含我們編寫的程式碼的檔案。我們可以使用簡單的文字編輯器或任何 IDE 來編寫 Java 程式。
無論我們使用什麼,我們都會儲存我們編寫的程式或原始碼。為了儲存 Java 原始碼檔案,我們使用 .java
副檔名。
每種語言都有不同的儲存原始碼檔案的約定。與 C 語言一樣,原始碼檔案具有 .c
副檔名;在 python 中,它是 .py
,而在 C++ 中,我們使用 .cpp
。
Java 中的 .class
檔案
.class
檔案是包含原始碼中類的位元組碼的檔案。該檔案在編譯時形成。
當我們提到 Java 是一種平臺無關的語言時,就是因為這些類檔案。這些檔案可以在任何作業系統或機器上執行。
.class
檔案可以被視為已編譯的 .java
檔案。它是在 JVM(Java 虛擬機器)上執行的檔案。
.class
檔案的數量不一定是一個。它等於原始碼具有的類數,因為每個類在編譯後進入不同的 .class
檔案。
示例 1:
public class DemoProgram{
/* This is a demo Java program that will print 'Hello Java' as the output */
public static void main(String[] args){
System.out.println("Hello Java");
}
}
輸出:
C:\Users\PC>javac DemoProgram.java
C:\Users\PC>java DemoProgram
Hello Java
在這段程式碼中,只有一個類 DemoProgram
。因此,由於編譯,我們只得到一個 .class
檔案 DemoProgram
。
現在,讓我們看另一個例子。
示例 2:
//A class
class TestCase
{
public static void main(String[] args)
{
System.out.println("An example with multiple classes.");
}
}
//Another class
class Demo
{
public static void main(String[] args)
{
System.out.println("This is an example.");
}
}
//One more class
class Example
{
public static void main(String[] args)
{
System.out.println("It contains three classes.");
}
}
編譯檔案:
C:\Users\PC>javac Example.java
編譯後,我們得到的不是一個而是三個 .class
檔案作為輸出。因此,你可以看到 .class
檔案的數量與原始碼中類的數量一樣多。
我們可以分別執行每個 .class 檔案,如下所示:
C:\Users\PC>java TestCase
An example with multiple classes.
C:\Users\PC>java Demo
This is an example.
C:\Users\PC>java Example
It contains three classes.
.java
和 .class
檔案之間的差異
下表總結了這兩種型別的檔案之間的區別。
.java 檔案 |
.class 檔案 |
---|---|
它包含 Java 原始碼。 | 它包含 Java 位元組程式碼。 |
程式設計師或個人編寫它。 | 它是編譯 .java 檔案的結果。 |
它是人類可讀的。 | 它在 JVM 中用於執行程式。 |
它在 .class 檔案之前形成。沒有這個,類檔案就不能形成。 |
它總是在 .java 檔案之後形成。 |
我們可以在任何文字編輯器或 Java IDE 上編寫它。 | 我們可以在任何作業系統或機器上執行它。 |
まとめ
這篇文章教會了我們 .java 檔案
和 .class 檔案
之間的主要區別。我們還看到了 Java 程式如何在機器級別和使用者級別上執行。
這個概念是 Java 程式設計的基礎,理解它對於有效地執行 Java 程式和應用程式很重要。