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

有效期判断功能 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 ”),因为Java 7引入了try-with-resources 。 第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添加到InputStream的方法transferTo(OutputStream) 。

第6项 (“ 避免创建不必要的对象 ”)提到了Java 9中对Boolean构造函数的弃用,该构造函数接受单个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

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

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

相关文章

Linux 命令之 touch -- 创建文件

文章目录命令介绍常用选项命令示例(一)创建空文件(二)批量创建文件(三)修改文件的访问时间命令介绍 touch 命令有两个功能:一是用于把已存在文件的时间戳更新为系统当前的时间(默认…

linux redis客户端_你见过能把Redis的主从复制讲这么明白的吗?

概念1.Conception(概念)Redis的复制也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。2.Function(功能)读写分离(秉持与RDBMS 相同的设计理念)容灾恢复R…

lombok 简化代码_如何编写更少,更好的代码,或Project Lombok

lombok 简化代码我长期以来一直打算写有关Lombok的文章 ,以至于每当一个自重的Java开发人员都已经听说过它时,我可能会写它。 尽管如此,值得一提的是,如果只是提醒自己,不要犹豫,尝试性能增强工具并查看它们…

discuz3.1用哪个版本php版本好,Discuz应用中心安装模板提示版本号不匹配适用于X3.3 X3.2 X3.1的解决方法...

有时候我们从应用中心安装模板,在应用中心里模板作者设定允许我们的程序版本,但是我们安装时却提示版本号不匹配,那这是为什么呢?经过我们分析发现是因为X3和X3.1,X3.2的模板是完全兼容的,很多模板是在X3的…

Linux 系统服务管理器(初始化系统/init system) -- systemd 及命令 systemctl 的详细介绍

文章目录一、系统服务管理器 systemd(一)systemd 的特性(二)systemd 与 传统 init 系统的区别(三)systemd 的目录和文件(四)systemd 的 Unit 介绍1.Unit 类型2.Unit 的配置文件&…

arch linux arm下载_arm开发板运行hello word的详细过程

arm开发板运行helloword1.uboot的编译​ 这里已经安装好了交叉编译工具链,如果自己的电脑下没有,请自行百度安装。将下载好uboot到linux下,进行解压-->打补丁-->编译-->烧写,执行以下命令完成上述四个步骤(不…

关于通信matlab 仿真,关于MATLAB在通信仿真系统中的运用

关于 MATLAB在通信仿真系统中的运用 卢 钊 贵 广 东南方 电信规 划 咨询 设 计院 有 限公 司 广 东 揭 阳 522031 【摘 要 】本文采用MATLAB软件 ,采集一些图像对其进行图像增 强处理以及MATLAB提供的可视化 SiinuIi nk建立 了扩频通信 系统仿真模 型 ,并…

化学专业尽早转行_尽早查看针对Java 11的功能

化学专业尽早转行随着JDK 10即将进入其候选发布阶段 ,通过JDK 11观察一下之后将会发生什么是很有趣的。 在撰写本文时,四个JEP ( JDK增强建议 )已正式成为JDK 11的目标(可能会出现)。 这篇文章总结了一些当…

系统服务管理与控制程序(Init System/初始化系统)-- Systemd 的 Unit 配置文件详解

文章目录一、Service 的配置文件(一)[Unit] 区块(二)[Service] 区块1.启动命令2.启动类型3.重启行为(三)[Install] 区块二、Target 的配置文件三、重载配置文件和重启服务一、Service 的配置文件 一个服务…

matlab乘法器数量级统一,基于matlab的数字滤波器的设计

1 数字滤波器的概述数字滤波器可以用差分方程、单位取样相应以及系统函数等表示,对于研究系统的实现方法,及它的运算结构来说,用狂徒便是最为直接。一个给定的输入输出关系,可以用多种不同的数字网络来实现。在不考虑量化影响是&a…

spring 计划任务_与Spring的计划任务一起按时运行

spring 计划任务您是否需要每天像闹钟一样在同一时间运行某个流程? 然后,Spring的预定任务适合您。 允许您使用Scheduled注释方法,以使其在指定的时间或内部间隔运行。 在本文中,我们将研究建立一个可以使用计划任务的项目&#x…

小程序 input自动换行_直播 | 最实用的微信小程序自动化测试技术独家揭秘

随着微信小程序的功能和生态日益完善,很多企业级小程序项目的页面越来越多,业务逻辑也越来越复杂。如何做好微信小程序的自动化测试成为测试同学面临的一大难题。如何合理构建多端架构和自动化测试体系?如何深入理解微信小程序特性和技术原理…

sit matlab,LabView SIT工具包的使用和安装说明

之前一直在用Simulink做仿真模型,现在要做测试需要用NI的设备和LabView软件,通过一段时间的学习,在SIT的使用上有了点小认识拿来跟大家分享一下。需要注意的是,必须是先安装MatLab Simulink 然后安装SIT工具包,如果先安…

php cdi_CDI中的事务异常处理

php cdi在Java EE中,在执行事务性业务方法期间引发的异常导致事务回滚。 但是,只有系统异常(即运行时异常)才是这种情况,该方法异常未在方法签名中声明。 对于应用程序异常(即检查的异常)或任何…

opencv 把3通道图像转成单通道_小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

引入问题引入,考虑以下几个问题:Q1. 一个3通道像素p的BGR分量(8bit表示)值均相同,那么这个像素是什么颜色的?Q2. 该像素p加上自己,即,像素p的各个通道值翻倍,那么这个像素…

Linux(CentOS 7.x) 下如何设置 nginx 开机启动?

CentOS 7 以上是用 Systemd 进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统,Systemd 服务文件以 .service 结尾。 使用命令 yum 安装 nginx 如果用 yum install 命令安装 nginx,yum 命令会自动在目录 /usr/lib/systemd/system …

mvc 404错误 php,java - springmvc 请求无法到达controller,出现404错误

springmvc 请求无法到达controller,出现404错误web.xmltestmvcindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspspringmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc-servlet.xml1springmvc/org.…

jdk 1.8 不可变常量_在JDK 10中不可变与不可修改

jdk 1.8 不可变常量大约两个月前, 斯图尔特马克斯 ( Stuart Marks)写道:“ 不变性就像葡萄酒 。” 然后,他提醒读者注意叔本华的熵定律 :“如果将一勺酒倒入装满污水的桶中,就会产生污水。 如果…

diff算法_传统Diff算法为什么时间复杂度要O(n ^3)

原文链接:https://juejin.im/post/6892671384976097287很多文章提到的都是新旧DOM树需要两两对比,但是没有说清楚为什么。思考大家想一下,如果让你来设计将一棵树转换为另一棵树,你会怎么设计?可能是直接暴力的根据ind…

CentOS 7 Linux 的初始化系统(系统服务管理和控制程序/Init System) -- systemd 详解

文章目录一、systemd 的由来(一)常用的 init 系统(二)init 程序的缺点(三)systemd 简介(四)systemd 架构图二、服务管理三、unit 配置文件(一)概述&#xff0…