首页 > 解决方案 > java和javac的机制是什么?

问题描述

经过很长时间的一些java相关工作,我刚刚拿起我的Ubuntu机器,发现我已经安装了 java 但没有安装 javac

我用一个主要方法和一个简单的打印语句制作了一个Test.java文件。我在终端上写了这个:

java Test.java

我希望没有javac这不应该编译和运行,但它会在我的控制台上打印输出。然后我安装了一个JDK来启用javac并运行它:

javac Test.java  

这创建了一个Test.class文件。仍然要运行我需要输入的 Test 类,java Test.java并且在输入java Test时会抛出java.lang.NoClassDefFoundError

有人可以向我解释这些命令的背景发生了什么吗?编辑:这是我的 Test.java 的内容:

package Learning;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Hello World!");
    }

}

标签: javajavac

解决方案


您在这里体验到的是为 Java 11 添加的新功能:

在 Java SE 11 中,您可以选择直接启动单个源代码文件,而无需中间编译。只是为了您的方便,让像您这样的新手不必运行 javac + java (当然,让他们感到困惑为什么会这样)。

从这里引用。有关更多详细信息,请参阅相应的 JEP 330

所以:如果您有一个独立的 .java 文件……那么java二进制文件会识别、编译并直接运行它(使用 Java 11 或更新版本时)。

但请记住:这只是一种快速运行单个类的方法。它并不是要取代“真实”的做事方式。

一般来说,你还是javac先用,再用java。或者,更真实的世界:您使用构建系统,在其中描述要构建的内容,然后构建系统javac在幕后为您调用。


推荐阅读