推荐序

前言

致谢


第一章 引言


第二章 创建和销毁对象


第三章 对于所有对象都通用的方法

  • 第10项:覆盖equals时请遵守通用约定
  • 第11项:覆盖equals时总要覆盖hashCode
  • 第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项:用enum代替int常量
  • 第35项:用实例域代替序数
  • 第36项:用EnumSet代替位域
  • 第37项:用EnumMap代替序数索引
  • 第38项:用接口模拟可扩展的枚举
  • 第39项:注解优先于命名模式
  • 第40项:坚持使用Override注解
  • 第41项:用标记接口定义类型

第七章 Lambda和Stream

  • 第42项:Lambda优先于匿名类
  • 第43项:方法引用优先于Lambda
  • 第44项:坚持使用标准的函数接口
  • 第45项:谨慎使用Stream
  • 第46项:优先选择Stream中无副作用的函数
  • 第47项:Stream要优先用Collection作为返回类型
  • 第48项:谨慎使用Stream并行

第八章 方法

  • 第49项:检查参数的有效性
  • 第50项:必要时进行保护性拷贝
  • 第51项:谨慎设计方法签名
  • 第52项:慎用重载
  • 第53项:慎用可变参数
  • 第54项:返回零长度的数组或者集合,而不是null
  • 第55项:谨慎返回optinal
  • 第56项:为所有导出的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和notify
  • 第82项:线程安全性的文档化
  • 第83项:慎用延迟初始化
  • 第84项:不要依赖于线程调度器

第十二章 序列化

  • 第85项:其他方法优先于Java序列化
  • 第86项:谨慎地实现Serializable接口
  • 第87项:考虑使用自定义的序列化形式
  • 第88项:保护性地编写readObject方法
  • 第89项:对于实例控制,枚举类型优先于readResolve
  • 第90项:考虑用序列化代理代替序列化实例

附录 与第2版中项目的对应关系

参考文献

欢迎关注个人公众号,获取同步更新哈!

Effective Java 3rd.Edition 翻译的更多相关文章

  1. [Java读书笔记] Effective Java(Third Edition) 第 6 章 枚举和注解

    Java支持两种引用类型的特殊用途的系列:一种称为枚举类型(enum type)的类和一种称为注解类型(annotation type)的接口. 第34条:用enum代替int常量 枚举是其合法值由一 ...

  2. CodePath Android CliffNotes 之 Effective Java for Android 翻译

    概述: 这篇文章的目的是作为这篇博文的开源版本,而netcyrax是该指南的原始文章的唯一作者. 请在下面添加您自己的在Android中Java最佳实践.技巧和巧妙! 建造者模式 当你拥有一个需要超过 ...

  3. [Java读书笔记] Effective Java(Third Edition) 第 7 章 Lambda和Stream

    在Java 8中,添加了函数式接口(functional interface),Lambda表达式和方法引用(method reference),使得创建函数对象(function object)变得 ...

  4. [Java读书笔记] Effective Java(Third Edition) 第 5 章 泛型

    第 26 条:请不要使用原生态类型 声明中具有一个或多个类型参数的类或者接口,就是泛型(generic). 例如List接口只有单个类型参数E, 表示列表的元素类型.这个接口全称List<E&g ...

  5. [Java读书笔记] Effective Java(Third Edition) 第 4 章 类和接口

    第 15 条: 使类和成员的可访问性最小化 软件设计基本原则:信息隐藏和封装. 信息隐藏可以有效解耦,使组件可以独立地开发.测试.优化.使用和修改.   经验法则:尽可能地使每个类或者成员不被外界访问 ...

  6. [Java读书笔记] Effective Java(Third Edition) 第 3 章 对于所有对象都通用的方法

    第 10 条:覆盖equals时请遵守通用约定 在不覆盖equals方法下,类的每个实例都只与它自身相等. 类的每个实例本质上都是唯一的. 类不需要提供一个”逻辑相等(logical equality ...

  7. [Java读书笔记] Effective Java(Third Edition) 第2章 创建和销毁对象

      第 1 条:用静态工厂方法代替构造器 对于类而言,获取一个实例的方法,传统是提供一个共有的构造器. 类可以提供一个公有静态工厂方法(static factory method), 它只是一个返回类 ...

  8. Effective Java, Third Edition

    https://github.com/jbloch/effective-java-3e-source-code 网址是 Effetive java的源码 effective-java-3e-sourc ...

  9. Effective Java Second Edition --- Builder Pattern

    如果类的构造器或者静态工厂中有多个参数,设计这种类时,Builder模式是一种不错的选择,特别是当大多数参数是可选的时候. 与使用传统的重载构造函数模式相比,使用Builder模式的客户端代码更易于阅 ...

随机推荐

  1. npm中npm install 始终出错解决办法

    npm中npm install 始终出错解决办法 错误信息: C:\Windows\System32>npm install -g gulp npm ERR! Windows_NT 6.1.76 ...

  2. Android的设置界面及Preference使用

    一般来说,我们的APP都会有自己的设置页面,那么其实我们有非常简单的制作方法.老样子,先看效果图. 然后就是看源代码了. 第一步,先在res文件夹中新建一个xml文件夹,用来存放preferences ...

  3. winform 如何正确的获取窗体的标题栏高度

    最近我需要知道鼠标在一个控件里的相对位置,鼠标相对于屏幕的位置我是可以知道的,所以只要得到控件相对于屏幕的位置,就可以算出鼠标相对于控件的位置了 但是发现有误差 后来经过测试是由于窗体的标题栏高度导致 ...

  4. vue简单路由(一)

    在项目中,将vue的单页面应用程序改为了多页面应用程序,因此在某些场景下,需要频繁的切换两个页面,因此考虑使用路由,这样会减少服务器请求. 使用vue-cli(vue脚手架)快速搭建一个项目的模板(w ...

  5. Elasticsearch集群如何扩容机器?

    前提, Elasticsearch-2.4.3的3节点安装(多种方式图文详解)   比如,你已经成功搭建了3台机器的es集群,如我这里分别是192.168.80.10.192.168.80.11.19 ...

  6. 关于python3 发送邮件

    一:发送文本信息 from email.mime.text import MIMEText from email.header import Header from smtplib import SM ...

  7. 常用Linux命令-文件上传和下载

    rz 上传本地文件到远程服务器 sz fileName 下载文件到本地电脑 如果不能使用以上命令进行文件上传和下载需要安装命令,步骤如下: 1.软件安装1)编译安装root 账号登陆后,依次执行以下命 ...

  8. Ubuntu下&nbsp;Nfs服务器安装

    Ubuntu Nfs服务器安装 nfs服务器在嵌入式开发中非常常用,可以实现主机和开发板共享文件.     1.安装软件包     sudo apt-get install nfs-common nf ...

  9. mongo_1 新手之路

    mongodb  进入.在bin目录下   至于安装各位自己查资料吧 .不废话了 直接上图.这种表示已经成功进入mongo 本人mongo  数据库存放地址.如有需要可以清空可以自己删除. 接下来就是 ...

  10. 37.ROUND() 函数

    ROUND() 函数 ROUND 函数用于把数值字段舍入为指定的小数位数. SQL ROUND() 语法 SELECT ROUND(column_name,decimals) FROM table_n ...