何时需要将java类X放入名为X.java的文件中?
伙计们,我遇到过这样的法律行为: 文件B.java: final class C {} final class D {} class B {} public class A {} 最后一类C{} 最后一类D{} 文件A.java: final class C {} final class D {} class B {} public class A {} B类{} 公共A类{} 问题: final class C {} final class D {} class B {} public class A {}何时需要将java类X放入名为X.java的文件中?,java,class,Java,Class,伙计们,我遇到过这样的法律行为: 文件B.java: final class C {} final class D {} class B {} public class A {} 最后一类C{} 最后一类D{} 文件A.java: final class C {} final class D {} class B {} public class A {} B类{} 公共A类{} 问题: final class C {} final class D {} class B {} public cla
非常感谢。公共类名必须位于名为ClassName.java的文件中 非公共类没有这样的限制
这样做的结果是,Java源文件只能有一个公共类,但可以有任意多个非公共类。在大多数实现中,事实上的标准是源文件只能包含一个顶级的
public
类型定义。源文件的名称必须是该类型的名称
源文件可以包含嵌套类型,但根据定义,它们不是顶级public
类型
这在Java语言规范中是推荐的,但不是必需的
当包存储在文件系统中时,如果在由类型名加扩展名(如.java
或.jav
)组成的文件中找不到类型,则主机系统可以选择强制执行以下限制,即这是编译时错误,前提是以下任一情况为真:
- 该类型由声明该类型的包的其他编译单元中的代码引用
- 该类型被声明为
(因此可以从其他包中的代码访问)public
类
;例如,public
类型wet.sprocket.Toad
的源代码可以在目录wet/sprocket
中的文件Toad.java
中找到,相应的目标代码可以在同一目录下的文件Toad.class
中找到
请注意,final
与可访问性无关,因此这与此无关
相关问题
public
类或接口,并且源文件必须与该类或接口具有相同的名称
这不是Java语言规范中的内容;这是Sun(现在的Oracle)Java编译器实现中的一个具体实现。(Java编译器的其他实现可能不需要这样做)。Sun/Oracle编译器允许每个文件最多使用一个公共顶级类,在这种情况下,文件名必须是类名 不强制执行此行为,但明确允许: 当包存储在文件中时 系统(§7.2.1),主机系统可 选择强制执行以下限制: 如果类型为 在名为的文件中找不到 由类型名称加上 扩展名(如.java或.jav) 以下任一项都是正确的:
- 该类型由中的代码引用 包的其他编译单元 其中声明了类型李>
- 该类型被声明为public(因此 可以从中的代码访问 其他软件包)李>
这是特定于实现的,但JLS确实有几点要说:当包托管在文件系统中时,实现“可能”选择这样做,但事实上,如果包存储在数据库中,“不得”这样做。所以它是“在”JLS中的(先把这些非强制性非规范是否属于JLS的问题放在一边)。。。奇怪的是,JLS在存储在数据库中时有“不得”的要求。这一要求的原因是什么?我不知道为什么JLS在存储在数据库中时会有“不得”要求。但是,当包托管在数据库中时,“源文件”是什么?谢谢您详尽的回答:)