Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时需要将java类X放入名为X.java的文件中?_Java_Class - Fatal编程技术网

何时需要将java类X放入名为X.java的文件中?

何时需要将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

伙计们,我遇到过这样的法律行为:

文件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 {}
  • 什么时候需要将类X放入它自己的X.java文件中?课堂可视性/最终结果在这里重要吗
  • 这个类/java关系有官方规范吗

  • 非常感谢。

    公共类名必须位于名为ClassName.java的文件中

    非公共类没有这样的限制


    这样做的结果是,Java源文件只能有一个公共类,但可以有任意多个非公共类。

    在大多数实现中,事实上的标准是源文件只能包含一个顶级的
    public
    类型定义。源文件的名称必须是该类型的名称

    源文件可以包含嵌套类型,但根据定义,它们不是顶级
    public
    类型

    这在Java语言规范中是推荐的,但不是必需的

    当包存储在文件系统中时,如果在由类型名加扩展名(如
    .java
    .jav
    )组成的文件中找不到类型,则主机系统可以选择强制执行以下限制,即这是编译时错误,前提是以下任一情况为真:

    • 该类型由声明该类型的包的其他编译单元中的代码引用
    • 该类型被声明为
      public
      (因此可以从其他包中的代码访问)
    此限制意味着每个编译单元最多必须有一个这样的类型。这种限制使得Java编程语言的编译器或Java虚拟机的实现很容易在包中找到一个命名的
    ;例如,
    public
    类型
    wet.sprocket.Toad
    的源代码可以在目录
    wet/sprocket
    中的文件
    Toad.java
    中找到,相应的目标代码可以在同一目录下的文件
    Toad.class
    中找到

    请注意,
    final
    与可访问性无关,因此这与此无关

    相关问题
    另见

    在Java中,源文件中只能有一个顶级的
    public
    类或接口,并且源文件必须与该类或接口具有相同的名称


    这不是Java语言规范中的内容;这是Sun(现在的Oracle)Java编译器实现中的一个具体实现。(Java编译器的其他实现可能不需要这样做)。

    Sun/Oracle编译器允许每个文件最多使用一个公共顶级类,在这种情况下,文件名必须是类名

    不强制执行此行为,但明确允许:

    当包存储在文件中时 系统(§7.2.1),主机系统可 选择强制执行以下限制: 如果类型为 在名为的文件中找不到 由类型名称加上 扩展名(如.java或.jav) 以下任一项都是正确的:

    • 该类型由中的代码引用 包的其他编译单元 其中声明了类型
    • 该类型被声明为public(因此 可以从中的代码访问 其他软件包)
    这一限制意味着 每个用户最多只能有一个这样的类型 汇编股。这一限制 使编译器能够轻松地 Java编程语言或 Java虚拟机的实现 计算机来查找 包装


    这是特定于实现的,但JLS确实有几点要说:当包托管在文件系统中时,实现“可能”选择这样做,但事实上,如果包存储在数据库中,“不得”这样做。所以它是“在”JLS中的(先把这些非强制性非规范是否属于JLS的问题放在一边)。。。奇怪的是,JLS在存储在数据库中时有“不得”的要求。这一要求的原因是什么?我不知道为什么JLS在存储在数据库中时会有“不得”要求。但是,当包托管在数据库中时,“源文件”是什么?谢谢您详尽的回答:)