java和javac的机制是什么?
What is the mechanism of java and javac?
经过长时间的 java 相关工作后,我才拿起我的 Ubuntu 机器,发现我已经安装了 java 但没有 javac。
我用 main 方法和一个简单的打印语句创建了一个 Test.java 文件。我在我的终端里写了这个:
java Test.java
我预计如果没有 javac 这应该不会编译并且 运行 但它在我的控制台上打印了输出。然后我安装了一个 JDK 来启用 javac 和 运行 这个:
javac Test.java
这创建了一个 Test.class 文件。仍然要 运行 测试 class 我需要键入 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!");
}
}
您在这里体验的是 Java 11 添加的新功能:
In Java SE 11, you get the option to launch a single source code file directly, without intermediate compilation. Just for your convenience, so that newbies like you don't have to run javac + java (of course, leaving them confused why that is).
引自 here. For more details, see the corresponding JEP 330.
所以:如果你有一个单个独立的.java文件...那么java 二进制识别,编译它,并直接 运行s 它(当使用 Java 11 或更新版本时)。
但请记住:这只是一种快速 运行 单个 class 的方法。它并不是要取代 "real" 做事的方式。
一般还是先用javac
,再用java
。或者,更真实的世界:您使用构建系统,在其中描述要构建的内容,然后构建系统会在幕后为您调用javac
。
经过长时间的 java 相关工作后,我才拿起我的 Ubuntu 机器,发现我已经安装了 java 但没有 javac。
我用 main 方法和一个简单的打印语句创建了一个 Test.java 文件。我在我的终端里写了这个:
java Test.java
我预计如果没有 javac 这应该不会编译并且 运行 但它在我的控制台上打印了输出。然后我安装了一个 JDK 来启用 javac 和 运行 这个:
javac Test.java
这创建了一个 Test.class 文件。仍然要 运行 测试 class 我需要键入 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!");
}
}
您在这里体验的是 Java 11 添加的新功能:
In Java SE 11, you get the option to launch a single source code file directly, without intermediate compilation. Just for your convenience, so that newbies like you don't have to run javac + java (of course, leaving them confused why that is).
引自 here. For more details, see the corresponding JEP 330.
所以:如果你有一个单个独立的.java文件...那么java 二进制识别,编译它,并直接 运行s 它(当使用 Java 11 或更新版本时)。
但请记住:这只是一种快速 运行 单个 class 的方法。它并不是要取代 "real" 做事的方式。
一般还是先用javac
,再用java
。或者,更真实的世界:您使用构建系统,在其中描述要构建的内容,然后构建系统会在幕后为您调用javac
。