'java class name'命令不起作用,最新版本是否有任何变化?



如果我没记错的话

  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

java - version

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)

HelloWorld.java

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

javap HelloWorld.class给出如下输出

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

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

在评论区得到一些stackoverflow老手的帮助后,我能够理解出了什么问题。

最新版本的Java已经介绍了使用Java命令直接启动单个文件的源代码。

from oracle docs.

启动单个源文件程序:

java [options] source-file [args…]

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

为什么旧的方式运行java类文件不适合我?

我在我的环境中有一个类路径变量'CLASSPATH',所以当我执行java HelloWorld时,它不会在当前目录中查找类。给java -cp .显式地给出当前目录给classpath

java -cp . HelloWorld

感谢:Jon Skeet,Joachim Sauer, rzwitserloot

相关内容

  • 没有找到相关文章

最新更新