我想我无法理解java包结构,对我来说,java文件中有一个包声明似乎是多余的,然后还需要出现在与包名匹配的目录中.例如,如果我有一个MyClass.java文件:
package com.example;
public class MyClass {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将需要将此文件放在com/example相对于基本目录的位置,并且我将从java com.example.MyClass基本目录执行以运行它.
为什么编译器不能通过查看目录结构来推断包名?例如,如果我从基本目录编译该文件javac com\example\MyClass.java,我不明白为什么MyClass.java不会隐含属于该com.example包.
我知道有一个默认包,但似乎源文件中的包声明仍然是冗余信息?
既然所有java类文件都放在一个与classes包匹配的目录中,为什么每个类都需要在顶部的包声明?编译器不应该能够从目录结构中获取包吗?