3 源文件结构
一个普通的源文件按顺序包含以下部分:
- 许可证或版权信息(如果有)
- 包声明(Package 声明)
- 导入语句(Import 语句)
- 恰好一个顶层类声明
各部分之间用恰好一个空行分隔。
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 顺序和间距
导入语句按以下顺序排列:
- 所有静态导入放在一个组中。
- 所有非静态导入放在一个组中。
如果同时存在静态导入和非静态导入,则两组之间用一个空行分隔。导入语句之间不允许有其他空行。
在每个组内,导入的名称按 ASCII 排序。(**注意:**这与导入语句行按 ASCII 排序不同,因为 ’.’ 排在 ’;’ 之前。)
3.3.4 不对类使用静态导入
静态导入不用于静态嵌套类。它们使用普通导入。
3.4 类声明
3.4.1 恰好一个顶层类声明
每个顶层类独占一个源文件。
3.4.2 类内容的排序
类的成员和初始化器的排列顺序对可学习性有很大影响。但是,没有唯一正确的排序方式;不同的类可以以不同的方式排列其内容。
重要的是每个类都使用某种逻辑顺序,其维护者在被问到时能够解释。例如,新方法不应只是习惯性地添加到类的末尾,因为那样会产生”按添加日期排序”的顺序,这不是一种逻辑排序。
3.4.2.1 重载方法:不要拆分
类中同名的方法应连续出现在一个组中,中间不插入其他成员。多个构造函数也是如此。即使方法或构造函数之间的修饰符(如
static 或 private)不同,此规则也适用。
3.5 模块声明
3.5.1 模块指令的顺序和间距
模块指令按以下顺序排列:
- 所有
requires指令放在一个块中。 - 所有
exports指令放在一个块中。 - 所有
opens指令放在一个块中。 - 所有
uses指令放在一个块中。 - 所有
provides指令放在一个块中。
各块之间用一个空行分隔。
Last updated on