.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