如果我没记错的话
javac filename.java
->编译并生成classname.class(es)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[]);
}
java HelloWorld.java
->执行正常,没有生成类文件。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