3. 源文件结构

源文件应由以下部分 按顺序 组成:

    1. 许可或版权信息(如果有的话)

    1. 包的声明

    1. 导入语句 (Import statements)

    1. 有且仅有一个顶级类

每个部分之间用 一个 空白行隔开。

3.1. 许可或版权信息(如果有的话)

如果文件中应包含许可证或版权信息,那么它应被放在此处。

3.2. 包声明

包声明 不换行。列限制(4.4节,Column limit: 100)不适用于包声明。

3.3. 导入语句

3.3.1. 不使用通配符导入

不使用 任何形式的 通配符导入 ,无论是静态的还是其他形式。

3.3.2. 不换行

导入语句 不换行 。列限制(4.4节, Column limit: 100 )不适用于导入语句。

3.3.3. 排序和间距

按以下顺序导入:

  • 所有的静态导入都在一个单独的块中。

  • 所有非静态导入都在一个单独的块中。

如果既有静态导入又有非静态导入,则两个块之间有一个空白行。导入语句之间没有其他空白行。

在每个块中,导入的名称按ASCII排序顺序出现。( 注意 :这不等同于按整个导入语句的ASCII排序,因为’.’排在’;’之前。) (译者注:这种情况只会出现在包名结尾为’.’时,所以实际上可以忽略不计。例如: import packageA.ClassA; import packageA.ClassA.; ,如果按整个语句的ASCII排序,后句应排在前句之前,因为’.’在ASCII中排在’;’前。除此之外其他情况按包名排序和按整个语句排序应得到相同的结果)

3.3.4. 不对类使用静态导入

不使用静态导入来导入静态嵌套类,而是使用常规导入。

3.4. 类的声明

3.4.1. 有且仅有一个顶级类声明

每个顶级类都位于其自己的源文件中。

3.4.2. 类中内容的顺序

类中成员和初始化器的顺序对于代码的可读性有很大影响。然而,并没有一个唯一正确的顺序,不同的类可能会以不同的方式排列其内容。

重要的是,每个类都使用 某种逻辑顺序 ,并且在被问及时,其维护者可以做出相应的解释。例如,新方法不仅仅是习惯性地添加到类的末尾,因为那会导致内容是“按添加时间排序”的,这并不是一个有逻辑的排序方式。

3.4.2.1. 重载:永不分割

类中拥有同一名称的方法应出现在一个连续的组中,中间不应该有任何其他成员。对于多个构造函数(它们的名称总是相同的)也是如此。即使在方法之间的修饰符(如 staticprivate )不同时,此规则仍然适用。