gpt4 book ai didi

java - 包名称与文件夹结构不同,但 Java 代码仍可编译

转载 作者:IT老高 更新时间:2023-10-28 20:31:31 25 4
gpt4 key购买 nike

我正在使用 Notepad++ 编写我的 Java 代码并使用命令提示符来编译和运行它。以下是我的示例 Java 代码,

    package abraKadabra;

public class SuperClass{
protected int anInstance;

public static void main(String [] abc){
System.out.println("Hello");
}
}

但是,此文件位于以下文件夹结构中:

“usingprotected\superPkg”(usingProtected 是 C 层次结构中某处的文件夹:)

所以,我在这里的包名应该是 usingProtected.superPkg 而不是我写的 abraKadabra。

但是,当我从命令提示符编译这个 Java 代码时,它编译得很好,没有错误或警告。为什么会这样?包名不应该遵循文件夹结构吗?如果应该,它将如何坚持?

例如如果我的包名是 usingProtected.superPkg,编译器会以相反的顺序检查。当前的工作目录应该是 superPkg,然后父目录应该是 usingProtected 并完成。它是如何检查带有包名的文件夹结构的吗?

最佳答案

Java 语言规范不强制文件位于某个目录中。它可选地允许编译器要求公共(public)类位于与类同名的文件中,但我认为包没有类似的东西。 Section 7.2.1讨论了文件系统中可能的存储选项,但据我所知,它没有说明强制执行源代码结构。

然而,在源目录结构中反射(reflect)包结构是最佳实践 - 并且是一个几乎普遍接受的约定......并且 javac 使用它来尝试查找源文件'没有明确指定要编译。

请注意,如果您从命令行编译,默认情况下每个类将出现在与相应源文件相同的位置,但如果您使用“-d”选项(例如“-d bin”)编译器会为你构建一个合适的输出目录结构,根植于指定目录。

关于java - 包名称与文件夹结构不同,但 Java 代码仍可编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395916/

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