阿里内部学习指南《Effective Java中文 第3版》程序员进阶必备
Java从1997年诞生到日趋完善,经过了20多年不断的发展壮大,已经拥有了近千万开发人员。如何编写出更清晰、更正确、更健壮且更易于重用的代码,是大家所追求的目标。
经典Jolt获奖作品《Effective Java》的第3版这本书,对上一版内容进行了彻底的更新,介绍了如何充分利用从泛型到枚举、从注解到自动装箱的各种特性,帮助读者更加有效地使用Java编程语言及其基本类库: java.lang. java.util和java.io,以及子包,如java.util. concurrent和java.util.function等。
本书的作者Joshua .Bloch曾经是Sun公司的杰出工程师和Google公司的首席Java架构师,带领团队设计和实现过无数的Java平台特性,在本书中,他为我们带来了90条程序员必备的经验法则:针对你每天都会遇到的编程问题提出了最有效、最实用的解决方案。
对于Java 平台精妙之处的独到见解,并提供优秀的代码范例。通过阅读贯穿全书的透彻的技术剖析与完整的示例代码,认真理解并加以实践,必定会从中受益匪浅。书中介绍的示例代码清晰易懂,也可以作为日常工作的参考指南。
本文档会免费分享给大家,需要获取学习的朋友,请帮忙分享,私信“Java”就能获得领取方式哦
本书分为12章共90个条目,涵盖了Java 5.0/6.0/ 7.0/ 8.0/ 9.0的种种技术要点。
第1章 引言
第2章 阐述何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清除动作。
- 用静态工厂方法代替构造器
- 遇到多个构造器参数时要考虑使用构建器
- 用私有构造器或者枚举类型
- 强化Singleton属性
- 通过私有构造器强化不可实例化的能力
- 优先考虑依赖注人来引用资源
- 避免创建不必要的对象
- 消除过期的对象引用
- 避免使用终结方法和清除方法
- ty-with-resource优先于try-finally
第3章 阐述对于所有对象都通用的方法,你会从中获知对equals, hashCode, toString,clone、finalize 以及Comparable .compareTo方法相当深入的分析,从而避免今后在这些问题上再次犯错。
- 覆盖equals时请遵守通用约定
- 覆盖equals时总要覆盖hashCode
- 始终要覆盖toString
- 谨慎地覆盖clone
- 考虑实现Comparable接口
第4章 阐述作为Java程序设计语言的核心以及Java语言的基本抽象单元(类和接口)在使用上的一些指导原则,帮助你更好地利用这些元素,设计出更加有用、健壮和灵活的类与接口。
- 使类和成员的可访问性最小化
- 要在公有类而非公有域中使用访问方法
- 使可变性最小化
- 复合优先于继承
- 要么设计继承并提供文档说明,要么禁止继承
- 接口优于抽象类
- 为后代设计接口
- 接口只用于定义类型
- 类层次优于标签类
- 静态成员类优于非静态成员类
- 限制源文件为单个顶级类
第5章和第6章中 分别阐述在Java1.5发行版本中新增加的泛型(Generic)以及枚举( Enum)和注解( Annotation)的最佳实践,教你如何最大限度地享有这些优势,并使整个过程尽可能地简单化。
- 请不要使用原生态类型
- 消除非受检的警告
- 列表优于数组
- 优先考虑泛型
- 优先考虑泛型方法
- 利用有限制通配符来提升API的灵活性
- 谨慎并用泛型和可变参数
- 优先考虑类型安全的异构容器
- 用enum代替int常量
- 用实例域代替序数
- 用EnumSet代替位域
- 用EnumMap代替序数索引
- 用接口模拟可扩展的枚举
- 注解优先于命名模式
- 坚持使用Override注解
- 用标记接口定义类型
第7章 专门讨论在Java 8中新增的函数接口( Functional Interface). Lambda 表达式和方法引用( Method Reference),使创建函数对象( Function Object)变得更加容易。接着探讨为处理数据元素的序列提供了类库级别支持的Stream API,以及如何最佳地利用这些机制。
- Lambda优先于匿名类
- 方法引用优先于Lambda
- 坚持使用标准的函数接口
- 谨慎使用Stream
- 优先选择Stream中无副作用的函数
- Stream要优先用Collection作为返回类型
- 谨慎使用Stream并行
本文档会免费分享给大家,需要获取学习的朋友,请帮忙分享,私信“Java”就能获得领取方式哦
第8章 讨论方法设计的几个方面:如何处理参数和返回值,如何设计方法签名,如何为方法编写文档,从而使方法设计在可用性、健壮性和灵活性上有进一步的提升。
- 检查参数的有效性
- 必要时进行保护性拷贝
- 谨慎设计方法签名
- 慎用重载
- 慎用可变参数
- 返回零长度的数组或者集合而不是null
- 谨慎返回optinal
- 为所有导出的API元素
- 编写文档注释
第9章 主要讨论Java语言的具体细节,讨论了局部变量的处理、控制结构、类库的使用、各种数据类型的用法,以及两种不是由语言本身提供的机制(Reflection和NativeMethod,反射机制和本地方法)的用法,并讨论了优化和命名惯例。
- 将局部变量的作用域最小化
- for-each循环优先于传统的for循环
- 了解和使用类库
- 如果需要精确的答案,请避免使用float和double
- 基本类型优先于装箱基本类型
- 如果其他类型更适合,则尽量避免使用字符串
- 了解字符串连接的性能
- 通过接口引用对象
- 接口优先于反射机制
- 谨慎地使用本地方法
- 谨慎地进行优化
- 遵守普遍接受的命名惯例
第10章 阐述如何充分发挥异常的优点来提高程序的可读性、可靠性和可维护性,以及减少异常使用不当所带来的负面影响,并提供了一些关于有效使用异常的指导原则。
- 只针对异常的情况才使用异常
- 对可恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要地使用受检异常
- 优先使用标准的异常
- 抛出与抽象对应的异常
- 每个方法抛出的所有异常都要建立文档
- 在细节消息中包含失败捕获信息
- 努力使失败保持原子性
- 不要忽略异常
第11章 阐述如何帮助你编写出清晰、正确、文档组织良好的并发程序,比如如何避免过度同步,优先采用Executor Framework.并发集合(ConcurrentCollection)、同步器(Synch-ronizer),以及是否需要依赖于线程调度器等。
- 同步访问共享的可变数据
- 避免过度同步
- executor、task 和stream优先于线程
- 并发工具优先于wait和线程安全性的文档化
- 慎用延迟初始化
- 不要依赖于线程调度器
第12章 阐述序列化方面的技术,并且有一项值得特别提及的特性,就是序列化代理( Serialization Proxy)模式,它可以帮助你避免对象序列化的许多缺陷。
- 其他方法优先于Java序列化
- 谨慎地实现Serializable接口
- 考虑使用自定义的序列化形式
- 保护性地编写readObject方法
- 对于实例控制,枚举类型优先于readResolve
- 考虑用序列化代理代替序列化实例
本文档会免费分享给大家,需要获取学习的朋友,请帮忙分享,私信“Java”就能获得领取方式哦
由于篇幅限制,小编只能在这里给大家展示文章目录及部分内容,以避免影响大家的阅读体
最后,希望大家都可以进大厂