有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

eclipse是Java所需要的。即使已定义,也要运行的类文件

我今天刚开始使用Java,当我运行代码时,我遇到了一个NoClassDefFoundError:

class Example {

    public static final String greeting = "Hi there";

    public static void main(String[] args) {
        System.out.format("%s", Example.greeting);
    }
}

以上是我的example.java代码的内容。这段代码在Eclipse执行时编译得很好,但当我试图单独运行example.java时,它失败了。当我运行这个程序时,Eclipse还创建了一些.class文件,但这并不能解释为什么如果我在另一个目录中单独运行.java会失败,因为class Example的所有信息都可以在.java文件中找到

Java是否需要.class文件来编译和运行,尽管程序中定义了类本身,为什么?我还通过终端构建了.java文件,效果很好


共 (1) 个答案

  1. # 1 楼答案

    Java程序的编译和执行分为两步:

    • 在编译阶段,Java编译器编译源代码并生成bytecode。这个中间bytecode.class file的形式保存

    • 在第二阶段,Java虚拟机(JVM)也称为Java解释器,将.class作为输入,并通过执行bytecode生成输出

    所以是的.class文件对于代码的执行是必不可少的.java文件是您编写的文本,但不是机器可以解释的文本

    下面是发生的事情的流程图:

    enter image description here

    要更深入地了解它:

    构建Java项目时,它会将源代码(包含在*.java源文件中)转换为Java bytecode(通常包含在*.class文件中)。这使您的高级代码离机器代码更近了一步,但还没有完全实现这个bytecode是一个紧凑指令的集合;机器更容易理解,但可读性较差

    当您在计算机、手机或任何其他支持Java的平台上运行Java应用程序时,基本上就是将这个Java bytecode传递给Java虚拟机。Java虚拟机中的解释器通常在运行时开始编译整个bytecode,遵循所谓的即时编译原则。这导致了在打开Java应用程序时的典型延迟,尽管通常是轻微的延迟,但与解释编译相比,通常会提高程序性能