Skip to Content
Java3 源文件结构

3 源文件结构

一个普通的源文件按顺序包含以下部分:

  1. 许可证或版权信息(如果有)
  2. 包声明(Package 声明)
  3. 导入语句(Import 语句)
  4. 恰好一个顶层类声明

各部分之间用恰好一个空行分隔。

package-info.java 文件的结构相同,但不包含类声明。

module-info.java 文件不包含包声明,并用模块声明替代类声明,但其他方面遵循相同的结构。

3.1 许可证或版权信息(如果有)

如果文件中需要包含许可证或版权信息,应放在此处。

3.2 包声明

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

3.3 导入语句

3.3.1 禁止使用通配符导入

不使用通配符(“按需”)导入,无论是静态导入还是其他导入。

3.3.2 不换行

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

3.3.3 顺序和间距

导入语句按以下顺序排列:

  1. 所有静态导入放在一个组中。
  2. 所有非静态导入放在一个组中。

如果同时存在静态导入和非静态导入,则两组之间用一个空行分隔。导入语句之间不允许有其他空行。

在每个组内,导入的名称按 ASCII 排序。(**注意:**这与导入语句行按 ASCII 排序不同,因为 ’.’ 排在 ’;’ 之前。)

3.3.4 不对类使用静态导入

静态导入不用于静态嵌套类。它们使用普通导入。

3.4 类声明

3.4.1 恰好一个顶层类声明

每个顶层类独占一个源文件。

3.4.2 类内容的排序

类的成员和初始化器的排列顺序对可学习性有很大影响。但是,没有唯一正确的排序方式;不同的类可以以不同的方式排列其内容。

重要的是每个类都使用某种逻辑顺序,其维护者在被问到时能够解释。例如,新方法不应只是习惯性地添加到类的末尾,因为那样会产生”按添加日期排序”的顺序,这不是一种逻辑排序。

3.4.2.1 重载方法:不要拆分

类中同名的方法应连续出现在一个组中,中间不插入其他成员。多个构造函数也是如此。即使方法或构造函数之间的修饰符(如 staticprivate)不同,此规则也适用。

3.5 模块声明

3.5.1 模块指令的顺序和间距

模块指令按以下顺序排列:

  1. 所有 requires 指令放在一个块中。
  2. 所有 exports 指令放在一个块中。
  3. 所有 opens 指令放在一个块中。
  4. 所有 uses 指令放在一个块中。
  5. 所有 provides 指令放在一个块中。

各块之间用一个空行分隔。

Last updated on