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

自从听说即将出版的有效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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

es管理kabina_小白学ES 05 - 通过Kibana管理集群服务

目录前述步骤:① 启动Kibana;② 通过浏览器访问Kibana;③ 进入Dev Tools(开发者工具)界面.1 检查集群的健康状况ES提供了一套_cat API, 可以查看ES中的各类数据.# 查询API:GET /_cat/health?v# 响应信息如下:epoch timestamp cluster status node.total node.data shards pri …

+h eclipse中ctrl_Eclipse 常用的快捷键都有哪些?

今天,小编大概整理了 几 组 Eclipse 的快捷键,希望对你有帮助。1、打开资源CTRL SHIFT R:打开所有类型文件,不包括 JAR 包; CTRL SHIFT T:打开 Java 类型文件,包括 JAR 包;2、查…

apache.camel_Apache Camel 2.11发布

apache.camel上周Apache Camel 2.11发布了。 这篇博客文章总结了最引人注目的新功能和改进。 有关详细说明,请参见Camel 2.11发行说明 。 1)新组件 与往常一样,每个新版本都包含许多新组件,这些组件是由我们庞大的用户群贡献的。…

c向文件中插入数据_Redis从文件中批量插入数据

简介在redis中,有时候需要批量执行某些命令,但是在redis的redis-cli下,只能一条条的执行指令,实在太麻烦了!想到这,你是不是蓝瘦香菇? 如果能将要执行的指令一行行存储到文件中,然后…

用杰克逊流式传输大型JSON文件– RxJava常见问题解答

在上一篇文章中,我们学习了如何解析过大的XML文件并将其转换为RxJava流。 这次让我们看一个大的JSON文件。 我们的示例将基于微小的colors.json,其中包含将近150种这种格式的记录: {"aliceblue": [240, 248, 255, 1],"antiqu…

python多级目录import_你真的会用Python模块与工具包吗?

在开发过程中,我们无法把所有代码、资源都放在同一个文件中。因此,模块导入在编码中是很常见的。无论是C、Java,还是Python、Go。可以把不同功能、不同模块进行分离,当使用的时候,可以通过import关键字在一个模块中使用…

八边形点坐标数的lisp_图形学入门第五课:齐次坐标

齐次坐标(Homegeneous Coordinates)在学习齐次坐标之前,我们要先好奇的问一下,为什么要学习齐次坐标。上一节课,我们学习了变换的三种基本形式:旋转,缩放,和切变。但是还有一种特殊的变换:Trans…

spring java配置_Spring Java配置

spring java配置我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration(aka JavaConfig)。 Spring 3.0引入了此功能,该功能使Spring可以完全用Java进行配置-不再需要XML! 我真的很喜欢使用JavaConfig&#…

分段概率密度矩估计_考研数学:高数、线代、概率3科目知识框架梳理

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先要确保常考题型,常考知识点非常熟练。下面从高等数学、线性代数、概率统计三个模块进行阐述。高等数学部分1.函数的极 限;数列的极 限;无穷小及阶的问题;2.微分中值定理的证明;不等式的证明;方程根的存在性及个数问…

对速度的需求,访问现有数据的速度提高了1000倍

了解如何通过使用标准Java 8流和Speedment的In-JVM-Memory加速器将分析数据库应用程序加速1000倍。 Web和移动应用程序有时会很慢,因为后备数据库很慢和/或与数据库的连接施加了延迟。 现代UI和交互式应用程序需要快速后端,并且理想情况下没有可观察到的…

mysqls压力测试怎么用_用 Swagger 测试接口,怎么在请求头中携带 Token?

松哥周末抽空给 Spring Security 系列也录制了一套视频,目录如下:感兴趣的小伙伴戳这里-->Spring BootVue微人事视频教程今天的话题来自一个小伙伴在微信上的提问:看到这个问题,松哥忽然想到我自己之前写过 Spring BootSwagger…

disruptor3_发布Disruptor 3.0.0

disruptor3我决定对整个版本的Disruptor都放置一个beta标签感到无聊,所以我决定将Disruptor 3.0.0发行到全世界。 此版本的最大挑战是清理代码并提出更好的算法来处理多个生产者。 如果我很幸运,可以更快。 在发布此版本时,我最初走了几个阴暗…

安卓手机背景变黑色怎么改_别着急扔掉旧手机 你的电脑可能需要它

PC玩家中,不少人都会有在玩游戏时观测电脑硬件状态的习惯。比如查看游戏帧数、CPU频率、GPU频率或是温度等。大多数人都是通过第三方软件,在游戏内把监测数据显示到电脑显示屏角落。可就算是在角落,这些数据依旧会阻挡游戏画面,在…

JDeps入门–分析项目的依赖关系

JDeps是Java依赖关系分析工具 ,这是一个命令行工具,它处理Java字节码(意味着.class文件或包含它们的JAR),并分析类之间静态声明的依赖关系。 可以用各种方式过滤结果,并可以将其汇总到包或JAR级别。 JDeps还…

禅道开源版用户手册_Docker搭建开源版禅道以及项目基本流程介绍

对于自学软件测试的同学来说,经常会遇到这样的困惑:测试用例怎么写?有啥好的模板?缺陷提交的模板是什么样的?bug的生命周期是啥?项目的流程是啥?以上这些困惑,在你仔细看完这篇文章后…

f12 卡 谷歌浏览器_抢券第二课:利用浏览器F12获取优惠券请求链接

抢券第二课为什么迟迟不来呢?因为最近京东没有那种神券需要定点抢购的,我也没法测试我的理论。现在京东的券随时可以领取到,我多没法测试的东西不想就这样欺骗你们。所以今天的第二课我们讲一讲神奇的谷歌浏览器F1201 工具准备一、浏览器这里…

Java命令行界面(第5部分):JewelCli

细算在Java命令行处理与Apache的百科全书CLI , args4j , jbock和命令行中先前的文章,我把注意力转向在这个岗位使用JewelCli完成的命令行参数相似的处理Java中。 几个Java命令行处理库使用批注来定义命令行选项。 到目前为止,本系…

dnf用虚拟机会被制裁吗_DNF: 神豪奶妈扬言, 战斗力没有超过他的, 都不配被加buff!...

要说到现在的年轻人们的交友方式绝对少不了游戏交友,以前的人们只要不出门那就是与世隔绝,而现在就算是不出门也可以在网络上结交一大帮朋友,游戏就是现在的年轻人们交友最多的地方之一。科技的发展让游戏进入了一个繁荣的春天,不…

什么叫轻量瓷_为什么说陶瓷是华夏文明的徽章?

一、先说何为徽章?徽,最基本的解释是标志、符号;章,基本释义较多,其之一为佩戴在身上的标志,如领章、胸章等。徽章,也就是佩戴在身上用以表示身份、职业或者荣誉的标志。徽章的作用是明确身份、…

Java命令行界面(第10部分):picocli

picocli主页面将picocli描述为“强大的微小命令行界面”,“ picocli”是一个文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助消息。 有颜色。” 这篇文章简要介绍了如何使用Picocli 0.9.7处理Java代码中的命令行参数。 像本系…