3. 源文件结构¶
源文件应由以下部分 按顺序 组成:
许可或版权信息(如果有的话)
包的声明
导入语句 (Import statements)
有且仅有一个顶级类
每个部分之间用 一个 空白行隔开。
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. 重载:永不分割¶
类中拥有同一名称的方法应出现在一个连续的组中,中间不应该有任何其他成员。对于多个构造函数(它们的名称总是相同的)也是如此。即使在方法之间的修饰符(如 static
或 private
)不同时,此规则仍然适用。