迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

.java 和 .class 之间的区别

作者:迹忆客 最近更新:2023/08/12 浏览次数:

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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便