-
2.创建和销毁对象
- 1.静态工厂方法代替构造器
- 2.多个参数考虑用builder
- 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.保护性的编写reaObject
- 77.对于实例控制,枚举类型优先于readResolve
- 78.考虑用序列化代理代替序列化实例