Java 编程规范

Java 编程规范

编程规范就是 Java 开发的最佳实践。帮助开发人员少走弯路。

Effective Java

  • 第 2 章 创建、销毁对象
    • 第 1 条:考虑用静态工厂方法代替构造器
    • 第 2 条:遇到多个构造器参数时要考虑用构建器
    • 第 3 条:用私有构造器或者枚举类型强化 Singleton 属性
    • 第 4 条:通过私有构造器强化不可实例化的能力
    • 第 5 条:避免创建不必要的对象
    • 第 6 条:消除过期的对象引用
    • 第 7 条:避免使用终结方法
  • 第 3 章 对于所有对象都通用的方法
    • 第 8 条:覆盖 equals 时请遵守通用约定
    • 第 9 条:覆盖 equals 时总要覆盖 hashCode
    • 第 10 条:始终要覆盖 toString
    • 第 11 条:谨慎地覆盖 clone
    • 第 12 条:考虑实现 Comparable 接口
  • 第 4 章 类和接口
    • 第 13 条:使类和成员的可访问性最小化
    • 第 14 条:在公有类中使用访问方法而非公有域
    • 第 15 条:使可变性最小化
    • 第 16 条:复合优先于继承
    • 第 17 条:要么为继承而设计,并提供文档说明,要么就禁止继承
    • 第 18 条:接口优于抽象类
    • 第 19 条:接口只用于定义类型
    • 第 20 条:类层次优于标签类
    • 第 21 条:用函数对象表示策略
    • 第 22 条:优先考虑静态成员类
  • 第 5 章 泛型
    • 第 23 条:请不要在新代码中使用原生态类型
    • 第 24 条:消除非受检警告
    • 第 25 条:列表优先于数组
    • 第 26 条:优先考虑泛型
    • 第 27 条:优先考虑泛型方法
    • 第 28 条:利用有限制通配符来提升 API 的灵活性
    • 第 29 条:优先考虑类型安全的异构容器
  • 第 6 章 枚举和注解
    • 第 30 条:用 enum 代替 int 常量
    • 第 31 条:用实例域代替序数
    • 第 32 条:用 EnumSet 代替位域
    • 第 33 条:用 EnumMap 代替序数索引
    • 第 34 条:用接口模拟可伸缩的枚举
    • 第 35 条:注解优先于命名模式
    • 第 36 条:坚持使用 Override 注解
    • 第 37 条:用标记接口定义类型
  • 第 7 章 方法
    • 第 38 条:检查参数的有效性
    • 第 39 条:必要时进行保护性拷贝
    • 第 40 条:谨慎设计方法签名
    • 第 41 条:慎用重载
    • 第 42 条:慎用可变参数
    • 第 43 条:返回零长度的数组或者集合,而不是:null
    • 第 44 条:为所有导出的 API 元素编写文档注释
  • 第 8 章 通用程序设计
    • 第 45 条:将局部变量的作用域最小化
    • 第 46 条:for-each 循环优先于传统的 for 循环
    • 第 47 条:了解和使用类库
    • 第 48 条:如果需要精确的答案,请避免使用 float 和 double
    • 第 49 条:基本类型优先于装箱基本类型
    • 第 50 条:如果其他类型更适合,则尽量避免使用字符串
    • 第 51 条:当心字符串连接的性能
    • 第 52 条:通过接口引用对象
    • 第 53 条:接口优先于反射机制
    • 第 54 条:谨慎地使用本地方法
    • 第 55 条:谨慎地进行优化
    • 第 56 条:遵守普遍接受的命名惯例
  • 第 9 章 异常
    • 第 57 条:只针对异常的情况才使用异常
    • 第 58 条:对可恢复的情况使用受检异常,对编程错误使用运行时异常
    • 第 59 条:避免不必要地使用受检的异常
    • 第 60 条:优先使用标准的异常
    • 第 61 条:抛出与抽象相对应的异常
    • 第 62 条:每个方法抛出的异常都要有文档
    • 第 63 条:在细节消息中包含能捕获失败的信息
    • 第 64 条:努力使失败保持原子性
    • 第 65 条:不要忽略异常
  • 第 10 章 并发
    • 第 66 条:同步访问共享的可变数据
    • 第 67 条:避免过度同步
    • 第 68 条:executor 和 task 优先干线程
    • 第 69 条:并发工具优先于 wait 和 notify
    • 第 70 条:线程安全性的文档化
    • 第 71 条:慎用延迟初始化
    • 第 72 条:不要依赖于线程调度器
    • 第 73 条:避免使用线程组
  • 第 11 章 序列化
    • 第 74 条:谨慎地实现 Serializable 接口
    • 第 75 条:考虑使用自定义的序列化形式
    • 第 76 条:保护性地编写 readObject 方法
    • 第 77 条:对于实例控制,枚举类型优先于 readResolve
    • 第 78 条:考虑用序列化代理代替序列化实例

资源