You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何Windows PowerShell中java .\HelloWorld报错而java HelloWorld正常?

为什么java .\HelloWorld报错而java HelloWorld正常?

哈哈,这个坑我刚从Linux转Windows的时候也踩过!其实核心是搞混了javacjava命令的本质要求:

  • javac是编译器,它认的是文件路径
    你用javac .\HelloWorld.java能成功,是因为javac需要明确知道源文件的位置,不管是相对路径还是绝对路径,只要能找到.java文件就行,所以带.\没问题。

  • java是运行命令,它认的是类名,不是文件路径
    你的代码里应该定义了public class HelloWorld对吧?这个HelloWorld就是类的全名(因为没加包)。当你运行java HelloWorld时,JVM会在当前目录(默认CLASSPATH包含当前目录)里找HelloWorld.class文件,然后加载这个类的main方法执行。

而你用java .\HelloWorld的时候,JVM会把整个.\\HelloWorld当成类名来处理——它会尝试寻找一个名为.\\HelloWorld的类,但你的类名根本不是这个,自然就会抛出Error: Could not find or load main class .\HelloWorld的错误了。

举个额外的例子:如果你的类在包com.test下,那运行时得写java com.test.HelloWorld,而不是java com\test\HelloWorld,道理是一样的——JVM只认类的全限定名,不认文件系统的路径。

内容的提问来源于stack exchange,提问作者Anirudh Balakka

火山引擎 最新活动