阿里内部学习指南《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”就能获得领取方式哦

由于篇幅限制,小编只能在这里给大家展示文章目录及部分内容,以避免影响大家的阅读体

最后,希望大家都可以进大厂

猜你喜欢

转载自blog.csdn.net/mrchaochao/article/details/106836870