我正在使用maven来构建项目并且编译失败,因为我把课程Test2放入Test.java,
但它是因为maven还是因为java本身不支持这个?
顺便说一句,我怎么能用eclipse打开一个maven项目?
一个public名为类ClassName必须(在大多数情况下)在一个名为文件中定义ClassName.java.
编辑
虽然这不是Java语言,大多数(如果不是全部)Java实现的要求,但是上面提到的类名和文件名之间的关系必须保持,否则将导致编译器错误.
(有关更多信息,请参阅Jon Skeet的答案.)
其原因可以通过阅读找到包:7.2节的Java语言规范,第三版.
在本节中,它描述了如何将目录结构映射到Java中的完全限定类名,这导致要求.class包含类的字节码的文件必须位于类似于完全类的路径中的文件中.合格的班级名称.
已经编辑了错误地声明命名方案是必需的原始答案.
Java语言规范本身实际上并不需要这样 - 但它明确允许基于文件系统的实现这样做,而且大多数都这样做.
从第7.6节:
当包存储在文件系统(第7.2.1节)中时,如果在由类型名称加上名称的文件中找不到类型,主机系统可以选择强制执行编译时错误的限制.如果满足以下任一条件,则为扩展名(例如.java或.jav):
- 该类型由声明类型的包的其他编译单元中的代码引用.
- 该类型被声明为public(因此可以从其他包中的代码访问).
这种限制意味着每个编译单元最多只能有一个这样的类型.这种限制使得Java编程语言的编译器或Java虚拟机的实现很容易在包中找到命名类; 例如,公共类型wet.sprocket.Toad的源代码可以在wet/sprocket目录中的Toad.java文件中找到,相应的目标代码可以在同一目录中的Toad.class文件中找到.
当包存储在数据库(第7.2.2节)中时,主机系统不得强加此类限制.实际上,许多程序员选择将每个类或接口类型放在它自己的编译单元中,无论它是公共的还是由其他编译单元中的代码引用.
出于实际目的,我认为基本上假设它是必需的是合理的.
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |