为什么Java要定义包名?

Ran*_*eis 2 java packages directory-structure

为什么Java不能根据文件夹结构搞清楚?

似乎已经由根源文件夹指定了到包的映射以及该特定文件的路径.

它是完全耦合的,并且在没有IDE的情况下进行重构是非常繁琐的 - 虽然更新对该文件的引用仍然是,但它至少可以部分地由编译器计算出来,而不是在文件级别指定包.

NIN*_*OOP 5

来自JLS 7.2

每个主机系统确定如何创建和存储包和编译单元.

每个主机系统还确定在特定编译中哪些编译单元是可观察的(第7.3节).反过来,编译单元的可观察性决定了哪些包是可观察的,哪些包在范围内.

在Java SE平台的简单实现中,包和编译单元可以存储在本地文件系统中.其他实现可以使用分布式文件系统或某种形式的数据库来存储它们.

如果主机系统将包和编译单元存储在数据库中,则数据库不得对基于文件的实现中允许的编译单元强加可选限制(第7.6节).

作为在文件系统中存储包的极其简单的示例,项目中的所有包和源代码以及二进制代码可以存储在单个目录及其子目录中.此目录的每个直接子目录都代表一个顶级包,即一个完全限定名由一个简单名称组成的包.每个更高级别的子目录将表示由包含目录表示的包的子包,依此类推.

另请阅读与您的问题密切相关的编译单元.

注意:从命令行编译时,默认情况下,每个类都将放在与相应源文件相同的位置,但如果使用"-d"选项,编译器将构建相应的输出目录.