为什么我必须在包的文件夹之外才能正确执行类文件?

问题描述 投票:0回答:1

(注意:我知道我这里没有使用标准命名约定。这些名称只是为了简单起见。)

我有一个名为'PackageTest.java'的文件。它的唯一目的是在控制台上打印一条线,说“这有用!”。它属于一个名为main的包。在我的控制台中,我执行命令:

javac -d . PackageTest.java

这将创建一个名为main的新目录(文件夹),其中包含名为“PackageTest.main”的类文件。我将CD放入其父目录,然后执行以下命令:

java main.PackageTest

然后控制台读取:

This works!

所以文件执行了。非常好。现在我把CD放到'main'文件夹中。我执行命令:

java main.PackageTest

只是为了得到结果:

Error: Could not find or load main class main.PackageTest
Caused by: java.lang.ClassNotFoundException: main.PackageTest

所以我尝试这个命令:

java PackageTest

现在我收到这个错误:

Error: Could not find or load main class PackageTest
Caused by: java.lang.NoClassDefFoundError: main/PackageTest (wrong name: 
PackageTest)

为什么我必须在目录之外才允许执行文件?

java package javac
1个回答
4
投票

包(和文件夹)在语义上是有意义的。您可以指定类路径,如果使用绝对路径,则可以在树中的任何位置移动并仍然运行代码。也可以使用相对路径。喜欢,

java -cp .. main.PackageTest
© www.soinside.com 2019 - 2024. All rights reserved.