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

标签 java package javac

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

我有一个名为“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 -cp .. main.PackageTest

关于java - 为什么我必须在包的文件夹之外才能正确执行类文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53312530/

相关文章:

java - java中删除字符串中的字符

java - 在 GUI 开发中使用构建器模式时,哪些被认为是实现构建器模式的好例子?

java - 为什么 Intellij 默认的 getter/setter 模板会删除我的 boolean 值 "is"变量名前缀?

Laravel stevebauman/location 返回错误数据

java - 为什么编译器会在多行中输出单个警告?

java - 为什么 Java Applet 不能只请求特定权限(例如,录制音频)

java - 无法在 Eclipse 中使用现有的 Java 包?

java - Java 新手,在将剪贴簿链接到构造函数时遇到问题

Java命令行编译问题和依赖关系

java - 了解 Java 中的最大蒙克?