【发布时间】:2020-01-24 22:31:49
【问题描述】:
互联网上的大多数网站都说:
“使用
javac命令编译一个.java文件。然后使用java命令运行它”
但是今天我尝试在没有javac的情况下运行一个java程序,结果很奇怪。
这是一个名为hello.java的文件的内容:
public class Myclass {
public static void main(String[] args){
System.out.println("hello world");
}
}
然后我跑了:
$ javac hello.java
这给了我这个错误:
hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.java
public class Myclass {
^
1 error
但是当我在没有javac 命令的情况下运行它时,它执行时没有任何错误。
$ java hello.java
hello world
java 命令也编译程序吗?如果是,为什么我们需要javac 命令?
我的java版本是:
openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode)
【问题讨论】:
-
您使用的是哪个版本?我认为他们在 Java 9 中引入了 Java Console,这可能就是您所经历的。
-
您需要将类名与其文件名相匹配——这是 Java 标准。只需将文件名更改为
Myclass.java,然后从命令行编译它像这样javac Myclass.java,然后像这样运行它java Myclass。 -
是的,
javac仍然用于编译,如果您不想部署源代码,或者您有多个文件(documentation 的java用于源文件选项:仅用于启动单个源文件程序。) -
@Matthieu "java -version" 的输出是:openjdk version "12.0.2" 2019-07-16 OpenJDK Runtime Environment (build 12.0.2+10) OpenJDK 64-Bit Server VM ( build 12.0.2+10,混合模式)
-
@Milad - 这是怎么回事 -
javac将 Java 源代码编译为 JVM 特定的解释字节码,java命令将其加载到 JVM 的 ClassLoader 中。