[笔记] Effective Java

Notes on Effective Java
2020/08/22 Tech 共 1499 字,约 5 分钟

Notes on Effective Java

Contents

  • 1 用静态工厂方法代替构造器
  • 2 遇到多个构造器参数时要考虑使用构建器
  • 3 用私有构造器或者枚举类型强化Singleton属性
  • 4 通过私有构造器强化不可实例化的能力
  • 5 优先考虑依赖注入来引用资源
  • 6 避免创建不必要的对象
  • 7 消除过期点对象引用
  • 8 避免使用终结方法和清除方法
  • 9 try-with-resources 优先于 try-finally
  • 10 覆盖equals时请遵守通用约定
  • 11 覆盖equals时总要覆盖hashCode
  • 12 始终要覆盖toString
  • 13 谨慎地覆盖clone
  • 14 考虑实现Comparable接口
  • 15 使类和成员的可访问性最小化
  • 16 要在公有类而非公有域中使用访问方法
  • 17 使可变性最小化
  • 18 复合优于继承
  • 19 要么设计继承并提供文档说明,要么禁止继承
  • 20 接口优于抽象类
  • 21 为后代设计接口
  • 22 接口只用于定义类型
  • 23 类层次优于标签类
  • 24 静态成员类优于非静态成员类
  • 25 限制源文件为单个顶级类
  • 26 请不要使用原生态类型
  • 27 消除非受检的警告
  • 28 列表优于数组
  • 29 优先考虑泛型
  • 30 优先考虑泛型方法
  • 31 利用有限制通配符来提升API的灵活性
  • 32 谨慎并用泛型和可变参数
  • 33 优先考虑类型安全的异构容器
  • 34 使用枚举类型替代整型常量
  • 35 使用实例属性替代序数
  • 36 使用EnumSet替代位属性
  • 37 使用EnumMap替代序数索引
  • 38 使用接口模拟可扩展的枚举
  • 39 注解优于命名模式
  • 40 始终使用Override注解
  • 41 使用标记接口定义类型
  • 42 lambda表达式优于匿名类
  • 43 方法引用优于lambda表达式
  • 44 优先使用标准的函数式接口
  • 45 明智审慎地使用Stream
  • 46 优先考虑流中无副作用的函数
  • 47 优先使用Collection而不是Stream来作为方法的返回类型
  • 48 谨慎使用流并行
  • 49 检查参数有效性
  • 50 必要时进行防御性拷贝
  • 51 仔细设计方法签名
  • 52 明智审慎地使用重载
  • 53 明智审慎地使用可变参数
  • 54 返回空的数组或集合,不要返回 null
  • 55 明智审慎地返回 Optional
  • 56 为所有已公开的 API 元素编写文档注释
  • 57 最小化局部变量的作用域
  • 58 for-each 循环优于传统 for 循环
  • 59 了解并使用库
  • 60 若需要精确答案就应避免使用 float 和 double 类型
  • 61 基本数据类型优于包装类
  • 62 当使用其他类型更合适时应避免使用字符串
  • 63 当心字符串连接引起的性能问题
  • 64 通过接口引用对象
  • 65 接口优于反射
  • 66 明智审慎地本地方法
  • 67 明智审慎地进行优化
  • 68 遵守被广泛认可的命名约定
  • 69 只针对异常的情况下才使用异常
  • 70 对可恢复的情况使用受检异常,对编程错误使用运行时异常
  • 71 避免不必要的使用受检异常
  • 72 优先使用标准的异常
  • 73 抛出与抽象对应的异常
  • 74 每个方法抛出的异常都需要创建文档
  • 75 在细节消息中包含失败一捕获信息
  • 76 保持失败原子性
  • 77 不要忽略异常
  • 78 同步访问共享的可变数据
  • 79 避免过度同步
  • 80 executor, task 和 stream 优先于线程
  • 81 相比 wait 和 notify 优先使用并发工具
  • 82 文档应包含线程安全属性
  • 83 明智审慎的使用延迟初始化
  • 84 不要依赖线程调度器
  • 85 优先选择 Java 序列化的替代方案
  • 86 非常谨慎地实现 Serializable
  • 87 考虑使用自定义的序列化形式
  • 88 保护性的编写 readObject 方法
  • 89 对于实例控制,枚举类型优于 readResolve
  • 90 考虑用序列化代理代替序列化实例

Notes:

  • Item 45 and Item 47: Cartesian Product
  • Item 79: CopyOnWriteArrayList -> Persistent data structures -> Finger Tree (待写)

文档信息

Search

    Table of Contents