0%

java命令可以编译Java程序吗?

❓ 大多数网站都说: “使用javac命令来编译.java文件。然后使用java命令运行它”。但是今天我试图在没有javac的情况下运行Java程序,但结果却很奇怪。

以下是一个名为hello.java的文件的内容:

1
2
3
4
5
public class Myclass {
public static void main(String[] args){
System.out.println("hello world");
}
}

运行:

1
$ javac hello.java

我得到这样的错误

1
2
3
4
hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.java
public class Myclass {
^
1 error

但是,当我不使用javac命令运行它时,它执行时没有任何错误。

1
2
$ java hello.java
hello world

java命令还会编译程序吗? 如果是,为什么我们需要javac命令?

我的Java版本是:bash

1
2
3
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 11之前,要运行代码,必须先对其进行编译,然后才能运行它。这是一个例子:

1
2
javac test.java
java test

从Java 11开始,您仍然可以使用Javac + Java,也可以单独运行Java来编译和自动运行代码。请注意,不会生成任何.class文件。这是一个例子:

1
java test.java

如果运行java -help,将看到各种允许的用法。这是我的机器上的样子。最后一个是您遇到的内容:java [options] [args],它将“执行单个源文件程序”。

1
2
3
4
5
6
7
8
9
10
$ java -help
Usage: java [options] [args...]
(to execute a class)
or java [options] -jar [args...]
(to execute a jar file)
or java [options] -m [/] [args...]
java [options] --module [/] [args...]
(to execute the main class in a module)
or java [options] [args]
(to execute a single source-file program)

为什么我们需要javac命令?

我们需要javac的原因是创建.class文件,以便可以像现在一样创建,测试,分发,运行,共享代码。JEP 330的动机是在不更改任何其他现有用法的情况下,使“学习Java的早期阶段以及编写小型实用程序时”变得更容易。