繁体   English   中英

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

从技术上讲,非公共(包私有)顶级类可以放在任何名称的文件中,并且多个这样的类可以捆绑在一个文件中,但这使它们很难找到。 出于这个原因,我看到了一个指南(不记得在哪里),该指南说您应该始终将顶级类放在自己的文件中,但有一个例外:

  • 如果非公共类由另一个类使用,则可以将其与另一个类放在同一编译单元(.java文件)中。

基本上,这意味着您应该考虑将名称不是文件名的任何顶级类“以文件为范围”,即使它在技术上是以包为范围。

有两个要遵循的规则:

第一条规则:该类可以具有程序包(默认)或公共可见性

第二条规则:您定义为public的类必须在具有相同名称的.java源文件中实现,但是非公共类可以在源文件中使用其他名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM