有效的Java第三版有哪些新功能?
自從聽(tīng)說(shuō)即將出版的有效Java 第三版以來(lái),我一直想知道其中有什么新內(nèi)容。 我假設(shè)將涵蓋自Java 6以來(lái)引入Java的功能,的確如此。 但是,第三版Java開(kāi)發(fā)人員經(jīng)典版也有一些其他更改。 在本文中,我提供了有關(guān)在第三版中添加,更改或刪除的主題的高級(jí)概述。
在列出我所觀察到的似乎是《 有效Java第三版》中的新內(nèi)容之前,我需要做出免責(zé)聲明,說(shuō)我很可能會(huì)錯(cuò)過(guò)本書(shū)中的幾處更改,共有12章,涵蓋90個(gè)項(xiàng)目,涵蓋350頁(yè)以上。 這篇文章并不是要詳細(xì)介紹第三版中的變更,而只是作為變更的高級(jí)樣本,鼓勵(lì)讀者借閱或購(gòu)買(mǎi)此有效Java第三版的副本來(lái)訪問(wèn)本書(shū)。低級(jí)細(xì)節(jié)。
不出所料, Effective Java第三版中有許多重要的新內(nèi)容,它們與Java 7 , Java 8甚至Java 9的新功能有關(guān)。
Java 7
Java 7推動(dòng)的一個(gè)顯而易見(jiàn)的新項(xiàng)目是Item 9 (“ 首選try-with-resources而不是try-finally ”),因?yàn)閠ry-with-resources是Java 7引入的。 第32項(xiàng) (“ 明智地組合泛型和可變參數(shù) ”)是第三版的新增內(nèi)容,并討論了Java 7引入的 @SafeVarargs批注(該批注對(duì)Java 9進(jìn)行了一些增強(qiáng) )。
第8項(xiàng) (“ 避免使用終結(jié)器和清理器 ”)已更新,以討論如何使用Java 7引入的AutoCloseable接口在某些最常用的用法中替換終結(jié)器和清理器。 項(xiàng)目49 (“ 有效性檢查參數(shù) ”)已更新為引用Java 7引入的Objects.requireNonNull方法。
項(xiàng)目80(“ 首選執(zhí)行人,任務(wù)和線程流 “)已經(jīng)‘流’,因?yàn)橛行У腏ava第二版加入到它的標(biāo)題,包括討論關(guān)于加叉/加入到執(zhí)行人框架在Java 7中第59項(xiàng) (“ 了解和使用庫(kù) ”)討論了Java 7中引入的ThreadLocalRandom 。
項(xiàng)目56 (“ 為所有公開(kāi)的API元素編寫(xiě)文檔注釋 ”)討論了使用JDK 7添加到j(luò)avadoc命令行的-Xdoclint開(kāi)關(guān)。
Java 8
項(xiàng)目21 (“ 后代的設(shè)計(jì)接口 ”)介紹了與在Java接口中使用默認(rèn)方法有關(guān)的最佳實(shí)踐。 正如其標(biāo)題所描述的那樣,整個(gè)第7章 (“ Lambda和流 ”)與Java 8引入的lambda和流有關(guān),由關(guān)于這些功能編程概念的七個(gè)項(xiàng)目( 項(xiàng)目42至項(xiàng)目48 )組成。 項(xiàng)目55 (“ 明智地返回可選參數(shù) ”)討論了Java 8引入的Optional的正確使用。
第1項(xiàng) (“ 考慮使用靜態(tài)工廠方法而不是構(gòu)造函數(shù) ”)在第三版中不是一個(gè)新項(xiàng)目,但現(xiàn)在討論Java 8中支持并在Java 9中得到增強(qiáng)的接口中的靜態(tài)方法。 第19項(xiàng) (“ 用于以下內(nèi)容的設(shè)計(jì)和文檔”繼承還是禁止繼承 ”), 這也不是新鮮事物,但現(xiàn)在提到了Javadoc @implSpec標(biāo)記 ,該標(biāo)記 “已在Java 8中添加并在Java 9中大量使用”。 毫不奇怪, 第56項(xiàng) (“ 為所有公開(kāi)的API元素編寫(xiě)文檔注釋 ”)還討論了@implSpec用法。
項(xiàng)目50 (“ 在需要時(shí)制作防御性副本 ”)沒(méi)有太多關(guān)注(日期和時(shí)間不是該項(xiàng)目的重點(diǎn)),但是引用了從Java 8開(kāi)始使用Instant而不是Date的內(nèi)容。
Java 9
有效的Java的第三版提供了比我預(yù)期的更少的有關(guān)模塊化 ( Java平臺(tái)模塊系統(tǒng) )的指導(dǎo),這可以說(shuō)是我們?cè)S多人與Java 9關(guān)聯(lián)的第一件事。 項(xiàng)目15 (“ 最小化類和成員的可訪問(wèn)性 ”)討論“作為模塊系統(tǒng)的一部分引入的兩個(gè)附加的隱式訪問(wèn)級(jí)別。”
在第二版中,第8項(xiàng) (“ 避免使用終結(jié)劑和清潔劑 ”)的標(biāo)題僅為“避免使用終結(jié)劑 ”。 在該項(xiàng)目的標(biāo)題上添加“和清潔器”,表明Java 9 不贊成使用finalizer (由于我非常熟悉的原因),并用Cleaner類代替了它。
項(xiàng)目56 (“ 為所有公開(kāi)的API元素編寫(xiě)文檔注釋 ”)討論了Java 9引入的Javadoc標(biāo)簽{@index} 。 項(xiàng)目59 (“ 了解和使用庫(kù) ”)討論了在Java 9中為什么重要的是知道標(biāo)準(zhǔn)庫(kù)中的可用內(nèi)容時(shí)使用Java 9將方法TransferTo(OutputStream)添加到InputStream的方法。
項(xiàng)目6 (“ 避免創(chuàng)建不必要的對(duì)象 ”)提到Java 9中對(duì)布爾型構(gòu)造函數(shù)的棄用,該構(gòu)造函數(shù)接受單個(gè)String參數(shù),作為對(duì)該項(xiàng)目中要點(diǎn)的說(shuō)明。 順便說(shuō)一句,Java 9中也不推薦使用其他唯一的布爾構(gòu)造函數(shù)[ Boolean(boolean) ]。
《有效的Java第三版》解決了Java 9對(duì)接口中的static方法( 第1項(xiàng) )和Optional ( 第55項(xiàng) )的改進(jìn)。 第19項(xiàng)還引用了Java 9對(duì)@implSpec的大量使用。 這三個(gè)項(xiàng)目中的每一個(gè)都在本文前面的“ Java 8”部分中進(jìn)行了突出顯示。
版本無(wú)關(guān)的新通用Java項(xiàng)目
在有效Java的第三版中 ,有一些新項(xiàng)目與第二版所涵蓋的Java新版本缺乏明顯的聯(lián)系。 其中包括第5項(xiàng) (“ 首選依賴項(xiàng)注入而不是硬連接資源 ”), 第25項(xiàng) (“ 將源文件限制為單個(gè)頂級(jí)類 ”)和第85項(xiàng) (“ 首選Java序列化的替代方案 ”)。 我在我的博客文章“ 將Google的協(xié)議緩沖區(qū)與Java結(jié)合使用 ”中寫(xiě)了更多關(guān)于Item 85(“ Java序列化的替代品”) 的內(nèi)容 。
刪除的項(xiàng)目和附錄
有效Java第二版中的一項(xiàng)似乎已被完全刪除。 第三版的有用“附錄”標(biāo)題為“第二版對(duì)應(yīng)的項(xiàng)目”,它表示第二版的單頁(yè)項(xiàng)目73 (“ 避免線程組 ”)已在第三版中“停用”。 該附錄的結(jié)構(gòu)也很容易識(shí)別,第二版的第21項(xiàng)(“使用功能對(duì)象代表策略”)在第三版中由第42項(xiàng) (“ 首選lambda優(yōu)先于匿名類 ”)代替。 順便說(shuō)一句,本書(shū)各版本中的錯(cuò)別字似乎都很少,但是在第三版中確實(shí)突出的錯(cuò)別字是附錄中與第二版中的第69項(xiàng)和第三版中的第81項(xiàng)相關(guān)的行。版。
小文本更新
在有效Java的第三版中,有幾項(xiàng)進(jìn)行了較小的文本更新,其中一些在更改中具有重要意義。 這些是最難調(diào)用的,但是我在這里提供一個(gè)示例。 在第二版,布洛赫在括號(hào)傳球?qū)懙?#xff0c; StringBuffer的是“過(guò)時(shí)的主要”相比, StringBuilder的 ,但在第三個(gè)版本,這是更強(qiáng)烈的措辭,狀態(tài)StringBuffer是的“過(guò)時(shí)的前身” StringBuilder 。 我完全同意案文的這種改變。
介紹
《 有效Java,第三版》的 11章涵蓋了構(gòu)成“ Java平臺(tái)最佳實(shí)踐”的90個(gè)項(xiàng)目。 但是,第1章(“簡(jiǎn)介”)很有價(jià)值,因?yàn)樗鼘ava 7,Java 8和Java 9中的“關(guān)鍵功能”與討論這些關(guān)鍵功能的一個(gè)或多個(gè)項(xiàng)目以及引入了這些關(guān)鍵功能的Java版本相關(guān)聯(lián)。 我希望我早些注意它,但是直到我大部分完成這篇文章之后,才在第1頁(yè)上看到這個(gè)方便的表格。 該表將為我節(jié)省大量時(shí)間來(lái)確定涉及Java 7,Java 8和Java 9新功能的項(xiàng)目!
“簡(jiǎn)介”也值得一讀,因?yàn)樗谐隽恕氨緯?shū)中的大多數(shù)規(guī)則”所依據(jù)的“一些基本原理”。 我喜歡Bloch在簡(jiǎn)介中明確指出的:“這本書(shū)不適合初學(xué)者:它假定您已經(jīng)熟悉Java。” 在線上有無(wú)數(shù)的論壇和主題,人們要求為Java新手準(zhǔn)備一本好書(shū)。 雖然我強(qiáng)烈建議有效的Java的各種版本的中級(jí)和高級(jí)Java開(kāi)發(fā)人員,我一直認(rèn)為,開(kāi)始Java開(kāi)發(fā)人員與學(xué)習(xí)Java,然后寫(xiě)了一本書(shū)最好應(yīng)該來(lái)有效的Java時(shí),他們知道核心概念和想知道如何盡可能清楚,簡(jiǎn)單地應(yīng)用這些概念。
結(jié)論
這篇文章重點(diǎn)介紹了第三版中對(duì)有效Java的一些最重要的添加和更改。 但是,我只提到了Java 7,Java 8和Java 9的一些快速參考,并且無(wú)疑在摘要中錯(cuò)過(guò)了一些新的和更改的文本。 為了反映Java的較新版本而對(duì)項(xiàng)目進(jìn)行的一些較小更改,旨在說(shuō)明如何將Java新功能編織到乍看似乎不一定與Java的新版本相關(guān)的多個(gè)項(xiàng)目中。
有效的Java是我購(gòu)買(mǎi)過(guò)三本書(shū)的唯一一本書(shū),但是多年來(lái),我現(xiàn)在已經(jīng)購(gòu)買(mǎi)了每個(gè)版本的一本書(shū),對(duì)此并不感到遺憾。 高效Java的第三版不僅涵蓋Java 7,Java 8和Java 9的新功能,還添加了項(xiàng)目并更新了先前存在的項(xiàng)目,以反映Josh Bloch對(duì)使用Java編程語(yǔ)言的最佳實(shí)踐的最新想法。
翻譯自: https://www.javacodegeeks.com/2018/01/whats-new-effective-javas-third-edition.html
總結(jié)
以上是生活随笔為你收集整理的有效的Java第三版有哪些新功能?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 坚实原则:开放/封闭原则
- 下一篇: 生育保险备案晚了报销不了(备案晚了报销不