这一次, 我们将使用大量的例子, 从代码文件头部结构、 对象结构、 类的内部结构、 方法的代码结构、 限定词的使用以及空行的使用这六大维度, 来说明到底该怎么组织一个源代码文件。
代码文件头部
包含三项内容
- 版权和许可声明;
//空一行
//“2018, 2019”中的2018表示的是代码的诞生日期, 2019表示的是代码的最近更
///改日期。 需要注意的是, 每次代码变更, 都要更改代码的最近更改日期。 - 命名空间(package) ;
//空一行 - 外部依赖(import) 。
代码文件对象结构
三个部分
- 类的规范;
- 类的声明;
- 类的属性和方法。
这一部分中, 我们需要注意的是, 对于公共类, 需要使用since标签, 标明从哪一个版本开始定义了这个类。 这样的标明, 方便我们对类进行版本管理, 减少我们进行代码变更时的工作量
类的内部代码结构
类的属性和方法, 一般是一个代码文件的主要组成部分。 类的结构, 推荐的编码顺序依次为:
- 类的属性;
- 构造方法;
- 工厂方法;
- 其他方法
类似于构造方法, 工厂方法也是用来构造一个类的实例。 不同的是, 工厂方法有具体的返回值。
它可以是静态方法, 也可以是实例方法。如果是实例方法, 工厂方法还可以被子类重写。 这是工厂方法和构造方法的另外一个重要的区别。 由于工厂方法也扮演着构造类实例的功能, 我们一般把它放在构造方法的后面, 其他方法的前面。
方法的代码结构: 一个方法需要包含三项内容
- 方法的规范;
//内部类的内部方法, 可以没有第一部分。 但对于公开类的公开方法, 方法的规范一定不能缺失。 - 方法的声明;
- 方法的实现
一个典型的规范, 应该包含以下十个部分:
- 方法的简短介绍;
- 方法的详细介绍(可选项) ;
- 规范的注意事项 (使用apiNote标签, 可选项);
- 实现方法的要求 (使用implSpec标签, 可选项);
- 实现的注意事项 (使用implNote标签, 可选项);
- 方法参数的描述;
- 返回值的描述;
- 抛出异常的描述: 需要注意的是, 抛出异常的描述部分, 不仅要描述检查型异常, 还要描述
运行时异常; - 参考接口索引(可选项) ;
- 创始版本(可选项) 。
按顺序使用限定词
在声明一个类、 方法或者方法属性时, 为了更准确地描述和理解声明的适用场景, 我们通常要使用修饰性的关键词。 这些修饰性的关键词, 我们通常称它们是修饰符或者限定词。 一个声明,
可以使用多个限定词。
限定词推荐使用顺序
- public/private/protected (访问控制限定词, 制定访问权限)
- abstract ( 抽象类或者抽象方法, 具体实现由子类完成)
- static ( 静态类、 方法或者类属性)
- final ( 定义不能被修改的类、 方法或者类属性)
- transient( 定义不能被序列化的类属性)
- volatile( 定义使用主内存的变量)
- default( 声明缺省的方法)
- synchronized( 声明同步的方法)
- native( 声明本地的方法, 也就是Java以外的语言实现的方法)
- strictfp( 声明使用精确浮点运算)
使用空行分割代码块
我们可以使用空行分割如下的代码块:
- 版权和许可声明代码块;
- 命名空间代码块;
- 外部依赖代码块
- 类的代码块;5. 类的属性与方法之间;
- 类的方法之间;
- 方法实现的信息块之间。