[英]What is the naming rules for public static final class identifier in java?
[英]Java class naming rules
在JAVA中,类名必须始终与文件名相同,但是有时文件包含多个类。 文件中的单个类(或接口)可以是公共的,并且必须与文件具有相同的名称。 但是,如果文件名具有多个非公共的类(或接口),那么如何确定文件名呢?
interface Foo {}
class Bar{}
有些人对此问题感到困惑
实际上,我知道无论选择Foo还是Bar作为文件名,它都可以使用。 但是,我感兴趣的是是否有某种命名类的约定。
我为什么不随便命名呢? 因为我实际上是在编写重构代码的应用程序,并且每当它重命名类时,我都需要知道如何以及何时更改文件名。
到目前为止,我认为正确的方法是:
如果class有一个公共节点,则使用其名称作为文件名,否则只需选择第一个节点,因此在此示例中Foo将获胜。 因此,我简化了一个问题:这是正确的方法,还是还有其他事情?
引用Java语言规范的第7.6节“ 顶级类型声明” :
当且仅当包存储在文件系统中(第7.2节),如果在文件中未找到由类型名组成的名称的类型,则主机系统可以选择强制实施限制,即编译时错误。如果满足以下任一条件,则加上扩展名(例如
.java
或.jav
):
该类型由声明该类型的包的其他编译单元中的代码引用。
该类型被声明为
public
(因此可以从其他包中的代码访问)。这种限制意味着每个编译单元最多只能有一个这样的类型。 此限制使Java编译器可以轻松地在包中查找命名的类。 实际上,许多程序员选择将每个类或接口类型放入其自己的编译单元中,无论该类或接口类型是公共的还是由其他编译单元中的代码引用的。
因此,正如您所看到的,正如您所说的,“类名必须始终与文件名相同”并不是必须的。
这只是一种允许某些编译器在编译过程中轻松查找类源代码的方法。
但是,更重要的是,它还可以帮助人们找到源代码。 如果您看到对com.example.Foo
类的引用,则您确切地知道在哪里可以找到它,因为它将在文件com/example/Foo.java
。
从技术上讲,非公共(包私有)顶级类可以放在任何名称的文件中,并且多个这样的类可以捆绑在一个文件中,但这使它们很难找到。 出于这个原因,我看到了一个指南(不记得在哪里),该指南说您应该始终将顶级类放在自己的文件中,但有一个例外:
基本上,这意味着您应该考虑将名称不是文件名的任何顶级类“以文件为范围”,即使它在技术上是以包为范围。
有两个要遵循的规则:
第一条规则:该类可以具有程序包(默认)或公共可见性
第二条规则:您定义为public的类必须在具有相同名称的.java源文件中实现,但是非公共类可以在源文件中使用其他名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.