《Effective Java 第三版》新条目介绍

前言

从去年的3月份起我就在开始读《Effective Java 第二版》,当然,我读的是中文版的;可能是我理解能力还不行,对于书中的内容总是感觉理解困难;就拿第一章的内容「创建和销毁对象」来说吧,这是我读的次数最多的一章,想必原因大家也是明白的,每次我读不下去的时候,我就从头开始读,所以,现在我对这本书的第一章是最为熟悉的了。后来,有一次我上网看到有网友说这本书确实和绝大部分的翻译书籍一样,对于有些原文中的内容翻译的不是很流畅,所以会导致阅读的人感觉难以理解;于是,我就斗胆下了本英文的原版来对照着来看,发现确实这样理解起来就更容易了,所以最后花了一两个月的时间就把整本书给啃完了(好吧,真实的情况是,这段时间我参与了几个项目,编程经验也因此积累了不少,所以对于《Effective Java》这本书里推荐的「最佳实践」有了一点点的思考与理解。)

其实,到目前为止,我还是会时不时地拿起这本书来翻看,每次读都感觉与上一次不一样,这也许就是「温故知新」的意思吧。

第三版新条目

上面的絮絮叨叨大家可以不用关心,现在我就来介绍下第三版中加入的一些新的条目。

大家可以先看下下面这张图,有个整体的概念。

因为,《Effective Java 第二版》的原版是2008年出版的,至今(2018)年已经有十年了,Java 语言在这十年里也发展的比较迅速,对于第二版中提及的「最佳实践」有些已经不是特别推荐了,幸好作者 Joshua Bloch 大叔重操旧笔为我们这群麻瓜带来了最新的条目,同时也更新了原有的条目。

这本书的原版是去年完稿的(2017年12月18号),作者正好补充了 Java 7、Java 8 和 Java 9 的一些「最佳实践」。另外,想必关注 Java 发展的麻瓜们已经了解到了 Java 之后的发版规则改了,「Java版本发布周期变更为每六个月一次」。是不是一下子觉得有点紧张了啊,其实也没什么好担心的,新特性的快速添加,对我们也是好事,可以减少一些低效的操作,使用新特性来解放生产力。

Java 7 新特性

  • try-with-resources | 一种新的资源关闭处理方式
  • @SafeVarargs | 忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告

Java 8 新特性

  • Lambdas | 引入函数式编程
  • Streams | 流式数据处理
  • Optionals | 参考Google的Guava类库实现的,用来解决空指针异常(NullPointerException,NPE)问题
  • Default methods in interfaces | 接口中可以有默认实现方法了

Java 9 新特性

  • Modules | 将 JDK 源代码重新组织为模块,对构建系统进行增强以使之支持对模块的编译,并在构建时强制对模块边界的应用

总结

这就是《Effective Java 第三版》新添加的条目,这篇文章只是大概的展示下新添加的条目,具体的内容还是需要读者去阅读书籍去了解,本人目前也在阅读当中,后续有什么阅读感悟会及时与诸君分享的。那么,重要的问题来了,如何去获取这本书籍的,因为中文翻译版本还没有那么快,如果,你对你的英文还感到有点自信,可以试试阅读原版。这里我就造福下你们了。下载地址:《Effective Java 第三版原版pdf》

参考资料

原文地址:https://www.cnblogs.com/VioletLove/p/9142629.html

时间: 2024-11-03 21:18:54

《Effective Java 第三版》新条目介绍的相关文章

Effective Java第三版(一) ——用静态工厂代替构造器

此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<Effective Java>第三版较之上一版新增了对Java7.8.9的一些新特性的条目.而条目的概念可以理解为武功秘籍中的一招一式,学完了每一招一式,就是神功大成之时.第三版在第二版的基础上新增了一些条目数,达到了90条.书就介绍到这里,下面介绍第一条——用静态工厂代替构造器. 对于创建对象,最熟悉的

Effective Java 第三版——3. 使用私有构造方法或枚类实现Singleton属性

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 3. 使用私有构造方法或枚类实现Singleton属性 单例是一个仅实例化一次的类[Gamma95].单例对象通常表示无状态对象,如函数(条目 24)或一个本质上唯一的系统

Effective Java 第三版——10. 重写equals方法时遵守通用约定

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr

Effective Java 第三版——14.考虑实现Comparable接口

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. ?14.考虑实现Comparable接口 与本章讨论的其他方法不同,compareTo方法并没有在Object类中声明. 相反,它是Comparable接口中的唯一方法.

Effective Java 第三版——18. 组合优于继承

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 18. 组合优于继承 继承是实现代码重用的有效方式,但并不总是最好的工具.使用不当,会导致脆弱的软件. 在包中使用继承是安全的,其中子类和父类的实现都在同一个程序员的控制之

Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 19. 如果使用继承则设计,并文档说明,否则不该使用 条目 18中提醒你注意继承没有设计和文档说明的"外来"类的子类化的危险. 那么为了继承而设计和文档

Effective Java 第三版——20. 接口优于抽象类

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 20. 接口优于抽象类 Java有两种机制来定义允许多个实现的类型:接口和抽象类. 由于在Java 8 [JLS 9.4.3]中引入了接口的默认方法(default met

Effective Java 第三版——21. 为后代设计接口

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 21. 为后代设计接口 在Java 8之前,不可能在不破坏现有实现的情况下为接口添加方法. 如果向接口添加了一个新方法,现有的实现通常会缺少该方法,从而导致编译时错误. 在

Effective Java 第三版——26. 不要使用原始类型

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 自Java 5以来,泛型已经成为该语言的一部分. 在泛型之前,你必须转换从集合中读取的每个对象. 如果有人不小心插入了错误类型的对象,则在运行时可能会失败. 使用泛型,你告