- 第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项:用enum代替int常量
- 第35项:用实例域代替序数
- 第36项:用EnumSet代替位域
- 第37项:用EnumMap代替序数索引
- 第38项:用接口模拟可扩展的枚举
- 第39项:注解优先于命名模式
- 第40项:坚持使用Override注解
- 第41项:用标记接口定义类型
- 第42项:Lambda优先于匿名类
- 第43项:方法引用优先于Lambda
- 第44项:坚持使用标准的函数接口
- 第45项:谨慎使用Stream
- 第46项:优先选择Stream中无副作用的函数
- 第47项:Stream要优先用Collection作为返回类型
- 第48项:谨慎使用Stream并行
- 第49项:检查参数的有效性
- 第50项:必要时进行保护性拷贝
- 第51项:谨慎设计方法签名
- 第52项:慎用重载
- 第53项:慎用可变参数
- 第54项:返回零长度的数组或者集合,而不是null
- 第55项:谨慎返回optinal
- 第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项:考虑用序列化代理代替序列化实例
欢迎关注个人公众号,获取同步更新哈!
原文:https://www.cnblogs.com/coloured_glaze/p/10582723.html