這裏是 Effective Java 第三版的新加內容的分解,幫助開發者更好的使用 Java 7,Java 8 和 Java 9。html
自從據說了即將出版的 Effective Java 第三版,我就疑惑這裏會有什麼樣的新東西。從java 6開始的新特性應該都會包含,事實上也是如此。然而,這裏有其餘的一些變化,對於java經典的開發,這篇文章裏,我提供了添加話題的高度歸納,發生的顯著變化,和在第三版中刪除的內容。java
在列舉以前,我觀察在Effective Java 第三版添加的新的內容,哈,我須要作個免責聲明,本書12章包含90項覆蓋超過350頁的內容裏我可能遺漏一些新的變化。這篇文章的目的不是提供在第三版詳細的變化,而是做爲一個高層次的抽樣,咱們鼓勵讀者借閱或購買一份Effective Java 第三版的來了解底層細節。程序員
正如預期的那樣,Effective Java 有顯著的新內容,第三版中加入了 Java 7, Java 8, 和甚至 Java 9的新特性。編程
在java 7 中有個顯著的新 item 9(Prefer try-with-resources to try-finally),由於java 7中引入了try-with-resources 。Item 32(Combine generics and varargs judiciously)在第三版中也是新加入的,討論 Java 7-introduced @SafeVarargs 註解(這個在java 9中有進一步的改進)。api
Item 8 ("Avoid finalizers and cleaners") 被更新和討論使用 Java 7 的 AutoCloseable 接口取代經常使用的finalizers 和 cleaners 。Item 49("Check parameters for validity")被更新,介紹 Java 7 中的Objects.requireNonNull 方法。微信
Item 80 ("Prefer executors, tasks, and streams to threads") ,在Effective Java 第二版中也加入了「streams」標題,包括Java 7 中加入的線程框架 Fork/Join。Item 59 ("Know and Use the Libraries") 介紹了Java 7 中 ThreadLocalRandom。oracle
Item 56 ("Write doc comments for all exposed API elements") 討論了JDK 7 中javadoc中的-Xdoclint 選擇項。框架
Item 21 ("Design interfaces for posterity") 包括 Jave 接口中默認方法最好的實踐。整個Chapter 7 ("Lambdas and Streams") 如同名字描述的,是Java 8中 lambdas and streams ,包含了 7 個Item(Item 42 到 Item 48) 討論函數式編程的概念。Item 55 ("Return optionals judiciously") 論述了正確使用java 8 的Optional。dom
Item 1 ("Consider static factory methods instead of constructors") 這個並非新的item,java 8 中介紹接口中的靜態方法而且在java 9 中作了加強。Item 19("Design and document for inheritance or else prohibit it") 這也不算是一個新的item,在java 8 中添加的標籤Javadoc @implSpec tag ,在Java中獲得了大量的使用。絕不奇怪,Item 56 ("Write doc comments for all exposed API elements") 也討論了@implSpec的使用。編程語言
Item 50 ("Make defensive copies when needed") 沒有太多關注(日期和時間並不應 Item 的重點),可是使用Instant 取代 java 8中的Date。
比起個人預期,Effective Java 提供了java 模塊化(Java Platform Module System)較少的指導,這是咱們談論不少java 9中的第一件事。Item 15("Minimize the accessibility of classes and members") 討論了另外兩個,模塊化系統的隱式訪問。
Item 8 ("Avoid finalizers and cleaners") 在第二版中是你簡單的標註「Avoid finalizers」,標題中添加的「and cleaners」反應的是 Java 9 中的deprecated the finalizer (由於不少理由我很熟悉它),取代的是 Cleaner class。
Item 56 ("Write doc comments for all exposed API elements") 討論了Java 9的Javadoc標籤{@index}。Item 59 ("Know and Use the Libraries") 討論了InputStream 中加入的方法transferTo(OutputStream) ,討論爲何瞭解可用的標準庫是很重要的。
Item 6 ("Avoid creating unnecessary objects")闡明java 9 deprecation Boolean constructor that accepts a single String parameter,而且 Boolean 構造函數[Boolean(boolean)] 也是deprecated。
Effective Java 第三版的改進從接口的靜態方法到(Item 1) 到 Optional (Item 55)。 Item 19 也說了 Java 9 中頻繁使用的 @implSpec,這三個 items 在以前的部分都已高亮「Java 8」
此次在Effective Java 第三版中加入了一些新的 items,比起第二版的內容缺乏明顯的鏈接到新版本的Java,這些包括Item 5 ("Prefer dependency injection to hardwiring resources"), Item 25 ("Limit source files to a single top-level class"),和 Item 85 ("Prefer alternatives to Java serialization")。我也寫了一點關於 Item 85("Prefer alternatives to Java serialization")在個人博客裏面"Using Google's Protocol Buffers with Java."
Effective Java 第二版中的有個Item被徹底移除,有用的"Appendix"換上了一個新的標題"Items Corresponding to the Second Edition" ,這指出單個頁面的 Item ("Avoid thread groups")已經從第三版中退役,從 Appendix 結構能夠看出第二版中的Item 21 ("Use function objects to represent strategies") 被第三版中的Item 42 ("Prefer lambdas to anonymous classes")取代。順便說一句,書的任何版本彷佛不多有拼寫錯誤。
Effective Java 第三版的幾個items 有輕微的文字更新,其中一些變化比較有意義。這個比較難說明,因此我這裏提供了一個例子。在第二版中,Bloch 在附加說明中寫到 StringBuffer 相比StringBuilder 是徹底過期的,而在第三版中強烈申明 StringBuffer 是 StringBuilder 過期的前任,我徹底贊同這棟文字的改變。
Effective Java 第三版有11個章節,包含90個Items 構成「java平臺的最佳實踐」,然而,第1章(「Introduction」)是有價值的,它闡述了 Java 7, Java 8, 和 Java 9 的關鍵特性 和 Item 中的關鍵特性,還有java 發行版中的哪些關鍵特性。我但願本身能夠早點關注到這些,直到我幾乎快讀完的時候才注意到第一頁。這個表能夠節省我不少時間來識別 Java 7, Java 8, 和 Java 9 的新特性。
「Introduction」值得一讀還由於它展現了"few fundamental principles",這本書的不少規則由它派生。我喜歡Bloch明確的介紹到「這本書是不適合初學者:它假定你已經熟悉java」。有不少論壇和在線網站但願有一本新書來介紹java新特性。雖然我高度推薦 Effective Java 不一樣版本給中級或者高級java 程序員,但我也感受初級Java程序員能夠有這樣通常書來學習Java的時候,能夠更好的瞭解核心概念,並知道怎麼簡單和清晰地應用這些概念。
這篇文章強調了一些Effective Java 第三版最重要的補充和修改,而後我只是說起了ava 7, Java 8, 和 Java 9 的快速參考,毫無疑問會錯過一些新的內容和修改。一些新版本的java特性被編織到不一樣的item中,咋看之下,你會發現不了有新的內容特性。
Effective Java 是我惟一一本我買過三次的,並不感到什麼後悔的,Effective Java 第三版 不只覆蓋了Java 7, Java 8, 和 Java 9 的新特性,還增長了Items和更新已有的Items,反映了Josh Bloch的新的思想的在使用 Java 編程語言最佳實踐。
原文地址:
https://dzone.com/articles/whats-new-in-effective-javas-third-edition
有什麼討論的內容,能夠加我微信公衆號: