java和javac的机制是什么?

pra*_*sht 0 java javac

很长时间之后,我刚刚拿起我的Ubuntu机器进行一些与Java相关的工作,发现我已经安装了Java,但没有javac

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

java Test.java
Run Code Online (Sandbox Code Playgroud)

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

javac Test.java  
Run Code Online (Sandbox Code Playgroud)

这创建了一个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!");
    }

}
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 5

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

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

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

所以:如果你有一个单一的自包含的java文件...那么的Java二进制认识到,编译它,并直接(使用Java 11或更高版本时)运行它。

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

通常,您仍然javac先使用,然后再使用java。或者,更真实的世界:您使用构建的系统来描述要构建的内容,然后构建系统javac会在幕后为您调用。