“java class name”命令不起作用,最近版本有什么变化吗?

Jis*_*hap 1 java java-11

如果我没记错的话

  1. javac filename.java-> 编译并生成classname.class(es)
  2. java classname没有 .class 扩展名

但是当我尝试java filename.java成功执行而java classname命令给出以下错误时,

Error: Could not find or load main class HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
Run Code Online (Sandbox Code Playgroud)

java版本

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Run Code Online (Sandbox Code Playgroud)

HelloWorld.java

public class HelloWorld {
   public static void main(String[] args) {
      // Prints "Hello, World" in the terminal window.
      System.out.println("Hello, World");
   }
}
Run Code Online (Sandbox Code Playgroud)

javap HelloWorld.class给出以下输出

Compiled from "HelloWorld.java"
public class HelloWorld {
  public HelloWorld();
  public static void main(java.lang.String[]);
}
Run Code Online (Sandbox Code Playgroud)
  1. java HelloWorld.java-> 执行正常,没有生成类文件。
  2. java HelloWorld-> 没有执行。

知道为什么程序会这样吗?

Jis*_*hap 5

在评论部分得到一些 stackoverflow 老手的帮助后,我终于明白出了什么问题。

最新版本的Java引入了直接使用Java命令启动单个文件源代码。

来自甲骨文文档。

要启动单个源文件程序:

java [选项] 源文件 [参数 ...]

要运行Helloworld.java,可以直接调用execute,java Helloworld.java它将执行java程序并给出输出,而不.class在当前目录中生成文件。

为什么运行 java 类文件的旧方法对我不起作用?

我的环境中有一个类路径变量“ CLASSPATH”,因此当我执行java HelloWorld它时,它不会在当前目录中查找类。Givejava -cp .将当前目录显式提供给类路径。

java -cp . HelloWorld
Run Code Online (Sandbox Code Playgroud)

致谢:乔恩·斯基特约阿希姆·绍尔rzwitserloot