网站首页 > 基础教程 正文
从本章开始,后续启动 《Java高效编程 第三版(Effective Java 3rd)》各章节的核心技术要点。
Effective Java 3rd(Java高效编程)专栏,免费阅读,欢迎关注
关注头条号“编程家园”,后续陆续会有更多技术领域(包括并不限于Android进阶、Kotlin、网络、Flutter、Python等),以及架构、职业规划、职业思考等方面资料的免费分享,期待您的关注!
最新大纲如下:
Chapter 2. Creating and Destroying Objects
- 01. 考虑使用静态工厂方法替代构造方法
- 02. 当构造方法参数过多时使用builder模式
- 03. 使用私有构造方法或枚类实现Singleton属性
- 04. 使用私有构造方法执行非实例化
- 05. 依赖注入优于硬连接资源(hardwiring resources)
- 06. 避免创建不必要的对象
- 07. 消除过期的对象引用
- 08. 避免使用Finalizer和Cleaner机制
- 09. 使用try-with-resources语句替代try-finally语句
Chapter 3. Methods Common to All Objects
- 10. 重写equals方法时遵守通用约定
- 11. 重写equals方法时同时也要重写hashcode方法
- 12. 始终重写 toString 方法
- 13. 谨慎地重写 clone 方法
- 14. 考虑实现Comparable接口
Chapter 4. Classes and Interfaces
- 15. 使类和成员的可访问性最小化
- 16. 在公共类中使用访问方法而不是公共属性
- 17. 最小化可变性
- 18. 组合优于继承
- 19. 要么设计继承并提供文档说明,要么禁用继承
- 20. 接口优于抽象类
- 21. 为后代设计接口
- 22. 接口仅用来定义类型
- 23. 类层次结构优于标签类
- 24. 支持使用静态成员类而不是非静态类
- 25. 将源文件限制为单个顶级类
Chapter 5. Generics
- 26. 不要使用原始类型
- 27. 消除非检查警告
- 28. 列表优于数组
- 29. 优先考虑泛型
- 30. 优先使用泛型方法
- 31. 使用限定通配符来增加API的灵活性
- 32. 合理地结合泛型和可变参数
- 33. 优先考虑类型安全的异构容器
Chapter 6. Enums and Annotations
- 34. 使用枚举类型替代整型常量
- 35. 使用实例属性替代序数
- 36. 使用EnumSet替代位属性
- 37. 使用EnumMap替代序数索引
- 38. 使用接口模拟可扩展的枚举
- 39. 注解优于命名模式
- 40. 始终使用Override注解
- 41. 使用标记接口定义类型
Chapter 7. Lambdas and Streams
- 42. lambda表达式优于匿名类
- 43. 方法引用优于lambda表达式
- 44. 优先使用标准的函数式接口
- 45. 明智审慎地使用Stream
- 46. 优先考虑流中无副作用的函数
- 47. 优先使用Collection而不是Stream来作为方法的返回类型
- 48. 谨慎使用流并行
Chapter 8. Methods
- 49. 检查参数有效性
- 50. 必要时进行防御性拷贝
- 51. 仔细设计方法签名
- 52. 明智审慎地使用重载
- 53. 明智审慎地使用可变参数
- 54. 返回空的数组或集合,不要返回 null
- 55. 明智审慎地返回 Optional
- 56. 为所有已公开的 API 元素编写文档注释
Chapter 9. General Programming
- 57. 最小化局部变量的作用域
- 58. for-each 循环优于传统 for 循环
- 59. 了解并使用库
- 60. 若需要精确答案就应避免使用 float 和 double 类型
- 61. 基本数据类型优于包装类
- 62. 当使用其他类型更合适时应避免使用字符串
- 63. 当心字符串连接引起的性能问题
- 64. 通过接口引用对象
- 65. 接口优于反射
- 66. 明智审慎地本地方法
- 67. 明智审慎地进行优化
- 68. 遵守被广泛认可的命名约定
Chapter 10. Exceptions
- 69. 只针对异常的情况下才使用异常
- 70. 对可恢复的情况使用受检异常,对编程错误使用运行时异常
- 71. 避免不必要的使用受检异常
- 72. 优先使用标准的异常
- 73. 抛出与抽象对应的异常
- 74. 每个方法抛出的异常都需要创建文档
- 75. 在细节消息中包含失败一捕获信息
- 76. 保持失败原子性
- 77. 不要忽略异常
Chapter 11. Concurrency
- 78. 同步访问共享的可变数据
- 79. 避免过度同步
- 80. executor 、task 和 stream 优先于线程
- 81. 并发工具优于 wait 和 notify
- 82. 文档应包含线程安全属性
- 83. 明智审慎的使用延迟初始化
- 84. 不要依赖线程调度器
Chapter 12. Serialization
- 85. 优先选择 Java 序列化的替代方案
- 86. 非常谨慎地实现 Serializable
- 87. 考虑使用自定义的序列化形式
- 88. 保护性的编写 readObject 方法
- 89. 对于实例控制,枚举类型优于 readResolve
- 90. 考虑用序列化代理代替序列化实例
- 上一篇: Spring源码系列(二)
- 下一篇: Java修炼终极指南:83. 声明一个Java记录
猜你喜欢
- 2024-11-19 1-0 Protobuf通信协议.proto文件编写
- 2024-11-19 阿里P8资深架构师耗时一年整理19年Java工程师成神之路
- 2024-11-19 Java修炼终极指南:83. 声明一个Java记录
- 2024-11-19 Spring源码系列(二)
- 2024-11-19 Java 14 发布了,快来了解下吧
- 2024-11-19 Spring技巧:深入研究Java 14和SpringBoot
- 2024-11-19 IntelliJ IDEA 2023.2 最新变化
- 2024-11-19 数据结构与算法 #18 下跳棋,极富想象力的同向双指针模拟
- 2024-11-19 Spring Bean生命周期你除了会背八股文面试,真的会用了吗?
- 2024-11-19 面试经验之BATMJ大厂面试Java岗位
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)