自从听说即将出版的有效Java 第三版以来,我一直想知道其中有什么新内容。 我假设将涵盖自Java 6以来引入Java的功能,的确如此。 但是,第三版Java开发人员经典版也有一些其他更改。 在本文中,我提供了有关在第三版中添加,更改或删除的主题的高级概述。

在列出我所观察到的似乎是《 有效Java第三版》中的新内容之前,我需要做出免责声明,说我很可能会错过本书中的几处更改,共有12章,涵盖90个项目,涵盖350页以上。 这篇文章并不是要详细介绍第三版中的变更,而只是作为变更的高级样本,鼓励读者借阅或购买此有效Java第三版的副本来访问本书。低级细节。

不出所料, Effective Java第三版中有许多重要的新内容,它们与Java 7 , Java 8甚至Java 9的新功能有关。

Java 7

Java 7推动的一个显而易见的新项目是Item 9 (“ 首选try-with-resources而不是try-finally ”),因为try-with-resources是Java 7引入的。 第32项 (“ 明智地组合泛型和可变参数 ”)是第三版的新增内容,并讨论了Java 7引入的 @SafeVarargs批注(该批注对Java 9进行了一些增强 )。

第8项 (“ 避免使用终结器和清理器 ”)已更新,以讨论如何使用Java 7引入的AutoCloseable接口在某些最常用的用法中替换终结器和清理器。 项目49 (“ 有效性检查参数 ”)已更新为引用Java 7引入的Objects.requireNonNull方法。

项目80(“ 首选执行人,任务和线程流 “)已经‘流’,因为有效的Java第二版加入到它的标题,包括讨论关于加叉/加入到执行人框架在Java 7中第59项 (“ 了解和使用库 ”)讨论了Java 7中引入的ThreadLocalRandom 。

项目56 (“ 为所有公开的API元素编写文档注释 ”)讨论了使用JDK 7添加到javadoc命令行的-Xdoclint开关。

Java 8

项目21 (“ 后代的设计接口 ”)介绍了与在Java接口中使用默认方法有关的最佳实践。 正如其标题所描述的那样,整个第7章 (“ Lambda和流 ”)与Java 8引入的lambda和流有关,由关于这些功能编程概念的七个项目( 项目42项目48 )组成。 项目55 (“ 明智地返回可选参数 ”)讨论了Java 8引入的Optional的正确使用。

第1项 (“ 考虑使用静态工厂方法而不是构造函数 ”)在第三版中不是一个新项目,但现在讨论Java 8中支持并在Java 9中得到增强的接口中的静态方法。 第19项 (“ 用于以下内容的设计和文档”继承还是禁止继承 ”), 也不是新鲜事物,但现在提到了Javadoc @implSpec标记 ,该标记 “已在Java 8中添加并在Java 9中大量使用”。 毫不奇怪, 第56项 (“ 为所有公开的API元素编写文档注释 ”)还讨论了@implSpec用法。

项目50 (“ 在需要时制作防御性副本 ”)没有太多关注(日期和时间不是该项目的重点),但是引用了从Java 8开始使用Instant而不是Date的内容。

Java 9

有效的Java的第三版提供了比我预期的更少的有关模块化 ( Java平台模块系统 )的指导,这可以说是我们许多人与Java 9关联的第一件事。 项目15 (“ 最小化类和成员的可访问性 ”)讨论“作为模块系统的一部分引入的两个附加的隐式访问级别。”

在第二版中,第8项 (“ 避免使用终结剂和清洁剂 ”)的标题仅为“避免使用终结 ”。 在该项目的标题上添加“和清洁器”,表明Java 9 不赞成使用finalizer (由于我非常熟悉的原因),并用Cleaner类代替了它。

项目56 (“ 为所有公开的API元素编写文档注释 ”)讨论了Java 9引入的Javadoc标签{@index}项目59 (“ 了解和使用库 ”)讨论了在Java 9中为什么重要的是知道标准库中的可用内容时使用Java 9将方法TransferTo(OutputStream)添加到InputStream的方法。

项目6 (“ 避免创建不必要的对象 ”)提到Java 9中对布尔型构造函数的弃用,该构造函数接受单个String参数,作为对该项目中要点的说明。 顺便说一句,Java 9中也不推荐使用其他唯一的布尔构造函数[ Boolean(boolean) ]。

《有效的Java第三版》解决了Java 9对接口中的static方法( 第1项 )和Optional第55项 )的改进。 第19项还引用了Java 9对@implSpec的大量使用。 这三个项目中的每一个都在本文前面的“ Java 8”部分中进行了突出显示。

版本无关的新通用Java项目

有效Java的第三版中 ,有一些新项目与第二版所涵盖的Java新版本缺乏明显的联系。 其中包括第5项 (“ 首选依赖项注入而不是硬连接资源 ”), 第25项 (“ 将源文件限制为单个顶级类 ”)和第85项 (“ 首选Java序列化的替代方案 ”)。 我在我的博客文章“ 将Google的协议缓冲区与Java结合使用 ”中写了更多关于Item 85(“ Java序列化的替代品”) 的内容 。

删除的项目和附录

有效Java第二版中的一项似乎已被完全删除。 第三版的有用“附录”标题为“第二版对应的项目”,它表示第二版的单页项目73 (“ 避免线程组 ”)已在第三版中“停用”。 该附录的结构也很容易识别,第二版的第21项(“使用功能对象代表策略”)在第三版中由第42项 (“ 首选lambda优先于匿名类 ”)代替。 顺便说一句,本书各版本中的错别字似乎都很少,但是在第三版中确实突出的错别字是附录中与第二版中的第69项和第三版中的第81项相关的行。版。

小文本更新

有效Java的第三版中,有几项进行了较小的文本更新,其中一些在更改中具有重要意义。 这些是最难调用的,但是我在这里提供一个示例。 在第二版,布洛赫在括号传球写道, StringBuffer的是“过时的主要”相比, StringBuilder的 ,但在第三个版本,这是更强烈的措辞,状态StringBuffer是的“过时的前身” StringBuilder 。 我完全同意案文的这种改变。

介绍

有效Java,第三版》的 11章涵盖了构成“ Java平台最佳实践”的90个项目。 但是,第1章(“简介”)很有价值,因为它将Java 7,Java 8和Java 9中的“关键功能”与讨论这些关键功能的一个或多个项目以及引入了这些关键功能的Java版本相关联。 我希望我早些注意它,但是直到我大部分完成这篇文章之后,才在第1页上看到这个方便的表格。 该表将为我节省大量时间来确定涉及Java 7,Java 8和Java 9新功能的项目!

“简介”也值得一读,因为它列出了“本书中的大多数规则”所依据的“一些基本原理”。 我喜欢Bloch在简介中明确指出的:“这本书不适合初学者:它假定您已经熟悉Java。” 在线上有无数的论坛和主题,人们要求为Java新手准备一本好书。 虽然我强烈建议有效的Java的各种版本的中级和高级Java开发人员,我一直认为,开始Java开发人员与学习Java,然后写了一本书最好应该来有效的Java时,他们知道核心概念和想知道如何尽可能清楚,简单地应用这些概念。

结论

这篇文章重点介绍了第三版中对有效Java的一些最重要的添加和更改。 但是,我只提到了Java 7,Java 8和Java 9的一些快速参考,并且无疑在摘要中错过了一些新的和更改的文本。 为了反映Java的较新版本而对项目进行的一些较小更改,旨在说明如何将Java新功能编织到乍看似乎不一定与Java的新版本相关的多个项目中。

有效的Java是我购买过三本书的唯一一本书,但是多年来,我现在已经购买了每个版本的一本书,对此并不感到遗憾。 高效Java的第三版不仅涵盖Java 7,Java 8和Java 9的新功能,还添加了项目并更新了先前存在的项目,以反映Josh Bloch对使用Java编程语言的最佳实践的最新想法。

翻译自: https://www.javacodegeeks.com/2018/01/whats-new-effective-javas-third-edition.html

有效的Java第三版有哪些新功能?相关推荐

  1. 有效期判断功能 java_有效的Java第三版有哪些新功能?

    有效期判断功能 java 自从听说即将出版的有效Java 第三版以来,我一直想知道其中有什么新内容. 我假设将涵盖自Java 6以来引入Java的功能,的确如此. 但是,第三版Java开发人员经典版也 ...

  2. Effective Java第三版有哪些新功能?

    自从听说即将出版的有效Java 第三版以来,我一直想知道其中有什么新内容. 我假设将涵盖自Java 6以来引入Java的功能,的确如此. 但是,第三版Java开发人员经典版也有一些其他更改. 在本文中 ...

  3. java第三阶段源代码_有效Java第三版的源代码已更新为使用较新的功能

    java第三阶段源代码 那些已经阅读了有效Java 第三版的人可能知道与该书相关的源代码可以在GitHub上获得 . jbloch / effective-java-3e-source-code项目拥 ...

  4. 有效Java第三版的源代码已更新为使用较新的功能

    那些已经阅读了有效Java 第三版的人可能知道与该书相关的源代码可以在GitHub上获得 . jbloch / efficiency-java-3e-source-code项目拥有1700多个星星,截 ...

  5. 华为荣耀8青春版计算机在哪里,华为荣耀8青春版有什么新功能

    华为荣耀8青春版有什么新功能?这是很多朋友比较关注的话题,荣耀8青春版上市以来抓住了一批年轻潮流群体,确实为了抓住青少年用户需求,青春版实际上在继承原有设计的基础之上进行了配置.功能上的针对性改变,使 ...

  6. 会声会影2023旗舰版强悍来袭!会声会影2023旗舰版有哪些新功能

    盼着!盼着!会声会影2023旗舰版终于发布了.接下来我们看会声会影2023旗舰版有哪些新功能 会声会影2023旗舰版是功能非常强大的视频编辑软件,非常专业的使用效果,会声会影2023中文版可以针对剪辑 ...

  7. Java之父James Gosling鼎力推荐《Effective Java 第三版》最新中文版,Java程序员必看神书

    前言 Java之父James Gosling鼎力推荐.Jolt获奖作品全新升级,针对Java 7.8.9全面更新,Java程序员必备参考书.包含大量完整的示例代码和透彻的技术分析,通过90条经验法则, ...

  8. Java 13 –深入了解JDK的新功能

    由于Java的版本号已经增加了两个,因此您可以快速判断今年的情况! 同时,我们的Java开发人员应该已经习惯了较短的发布周期. 毕竟,我们现在可以定期尝试新功能,并且不会每隔几年就被大量新功能所杀死. ...

  9. .NET 6 预览版 7:新功能已完成 ,将专注于改进

    .NET 团队的项目经理 Richard Lander在宣布 .NET 6 Preview 7 时说:"这是 .NET 预览的又一季的结束.", 中文翻译:.NET 6 预览版 7 ...

最新文章

  1. 数据分析常用功能:巧用门户制作功能,让多个报表一览无余
  2. 成都工业学院计算机工程学院院长,青春的交接礼——成都工业学院计算机工程学院...
  3. 蓝牙配对模式 java_BLE(低功耗蓝牙)配对和绑定
  4. mysql字节对齐_结构体字节对齐(转)
  5. 前端学习(2523):展示博客并添加方法
  6. 重温C++之“strcpy_s与strcpy的比较”
  7. 教你怎么使用Jmail发送匿名的邮件(不要身份认证)
  8. 开启admin$共享
  9. Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file解决
  10. Myeclipse6.5中安装maven
  11. python机器学习教程_从零开始掌握Python机器学习:十四步教程
  12. Cherno OpenGL 教程
  13. latex 绘制三线表
  14. IP协议详解之IPv6头部结构简介
  15. Word转Excel技巧之WPS另存法
  16. 为什么数据库不适用于容器
  17. 解读《花木兰》中的木兰形象
  18. java之枚举类型enum
  19. Kubeadm部署高可用K8S集群
  20. 倒计时1天! | 明日9点,这场精彩的Web3盛宴不容错过

热门文章

  1. 你知道面试官是如何刷人的吗
  2. 《金色梦乡》金句摘抄(二)
  3. 使用ueditor实现多图片上传案例——ServiceImpl层(ShoppingServiceImpl)
  4. javaWeb服务详解(含源代码,测试通过,注释) ——Dept的Dao层
  5. Linux清理磁盘挂载点方法(亲测有效)
  6. 2015蓝桥杯省赛---java---A---9(垒筛子)
  7. linux微信公众号报警,zabbix报警媒介,微信报警,邮件报警
  8. 软件测试遇到的异常情况,豪之诺软件测试项目开发中遇到比较多的Bug总结
  9. tomcat(19)Manager应用程序的servlet类
  10. 计算机器内存数量+引入和显示ARDS成员