.java 和 .class 之間的區別

Shikha Chaudhary 2023年10月12日
  1. 用 Java 編寫程式的基礎知識
  2. Java 中的 .java 檔案
  3. Java 中的 .class 檔案
  4. .java.class 檔案之間的差異
  5. まとめ
.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 程式和應用程式很重要。

相關文章 - Java File

相關文章 - Java Class