00. 首页effective-java-3rd-chinese01. 考虑使用静态工厂方法替代构造方法02. 当构造方法参数过多时使用builder模式03. 使用私有构造方法或枚类实现Singleton属性04. 使用私有构造方法执行非实例化05. 依赖注入优于硬连接资源(hardwiring resources)06. 避免创建不必要的对象07. 消除过期的对象引用08. 避免使用Finalizer和Cleaner机制09. 使用try-with-resources语句替代try-finally语句10. 重写equals方法时遵守通用约定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. 明智审慎地使用Stream46. 优先考虑流中无副作用的函数47. 优先使用Collection而不是Stream来作为方法的返回类型48. 谨慎使用流并行49. 检查参数有效性50. 必要时进行防御性拷贝51. 仔细设计方法签名52. 明智审慎地使用重载53. 明智审慎地使用可变参数54. 返回空的数组或集合,不要返回 null55. 明智审慎地返回 Optional56. 为所有已公开的 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 和 notify82. 文档应包含线程安全属性83. 明智审慎的使用延迟初始化84. 不要依赖线程调度器85. 优先选择 Java 序列化的替代方案86. 非常谨慎地实现 Serializable87. 考虑使用自定义的序列化形式88. 保护性的编写 readObject 方法89. 对于实例控制,枚举类型优于 readResolve90. 考虑用序列化代理代替序列化实例
评论