.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 程序和应用程序很重要。