gpt4 book ai didi

java - 包是否必须与 java 文件所在的子目录相匹配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:53 24 4
gpt4 key购买 nike

今天早上我正在为我的 java 认证编写一些练习程序,并注意到我输入了错误的包名称,因此它与 java 文件所在的子目录不匹配。我编译了代码预期会出错,但是一切编译后的文件——甚至没有警告。

我用谷歌搜索了一下,我读到的大部分页面都说包名必须与子目录匹配。我的经验表明情况并非如此。

当我尝试运行该程序时,它没有运行,因为 .class 文件位于错误的目录中。我将其移至正确的目录,但出现此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/directory
/doesnt/even/exist/OtherPackageMemberModifiers (wrong name: com/sample/chap01/O
therPackageMemberModifiers)

所以我认为我看到的是,如果包和子目录不匹配,Java 代码将编译,但似乎没有运行代码的方法如果你这样做。对吗?

最佳答案

包名称必须与目录名称匹配才能正确找到 文件。对于某些编译器(例如 javac),它必须在编译时匹配目录名称,尽管其他编译器(例如 Eclipse)至少会发出警告。

“如果你这样做,运行代码的方法”是创建目录结构并手动将其放入 - 类文件本身是完全有效的。

请注意,如果您使用 -d 标志,javac 将为您构建适当的目录层次结构,而不管源位置如何。例如:

javac -d bin ClassInPackage.java

将在 bin 下创建任何需要的目录以匹配在 ClassInPackage.java 中声明的包。

说了这么多,我仍然强烈建议您让源目录与包匹配,即使没有它您也可以逃脱:)

关于java - 包是否必须与 java 文件所在的子目录相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8310518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com