- Java實戰(第2版)
- (英)拉烏爾-加布里埃爾·烏爾瑪 (意)馬里奧·富斯科 (英)艾倫·米克羅夫特
- 3440字
- 2020-04-22 12:24:10
關于本書
簡單地說,Java 8中的新增功能以及Java 9引入的變化(雖然并不顯著)是自Java 1.0發布21年以來,Java發生的最大變化。這一演進沒有去掉任何東西,因此你原有的Java代碼都能工作,但新功能提供了更強大的新習語和新設計模式,能幫助你編寫更清晰、更簡潔的代碼。就像遇到所有新功能時那樣,你一開始可能會想:“為什么又要去改我的語言呢?”但稍加練習之后,你就會發覺自己只用預期的一半時間,就用新功能寫出了更短、更清晰的代碼,這時你會意識到自己永遠無法返回到“舊Java”了。
本書會幫助你跨過“原理聽起來不錯,但還是有點兒新,不太適應”的門檻,從而熟練地編程。
“也許吧,”你可能會想,“可是Lambda、函數式編程,這些不是那些留著胡子、穿著涼鞋的學究們在象牙塔里面琢磨的東西嗎?”或許是的,但Java 8中加入的新想法的分量剛剛好,它們帶來的好處也可以被普通的Java程序員所理解。本書會從普通程序員的角度來敘述,偶爾談談“這是怎么來的”。
“Lambda,聽起來跟天書一樣!”是的,也許是這樣,但它是一個很好的想法,讓你可以編寫簡明的Java程序。許多人都熟悉事件處理器和回調函數,即注冊一個對象,它包含會在事件發生時使用的一個方法。Lambda使人更容易在Java中廣泛應用這種思想。簡單來說,Lambda和它的朋友“方法引用”讓你在做其他事情的過程中,可以簡明地將代碼或方法作為參數傳遞進去執行。在本書中,你會看到這種思想出現得比預想的還要頻繁:從加入做比較的代碼來簡單地參數化一個排序方法,到利用新的Stream API在一組數據上表達復雜的查詢指令。
“流(stream)是什么?”這是Java 8的一個新功能。它的特點和集合(collection)差不多,但有幾個明顯的優點,讓我們可以使用新的編程風格。首先,如果你使用過SQL等數據庫查詢語言,就會發現用幾行代碼寫出的查詢語句要是換成Java要寫好長。Java 8的流支持這種簡明的數據庫查詢式編程——但用的是Java語法,而無須了解數據庫!其次,流被設計成無須同時將所有的數據調入內存(甚至根本無須計算),這樣就可以處理無法裝入計算機內存的流數據了。但Java 8可以對流做一些集合所不能的優化操作,例如,它可以將對同一個流的若干操作組合起來,從而只遍歷一次數據,而不是花很大成本去多次遍歷它。更妙的是,Java可以自動將流操作并行化(集合可不行)。
“還有函數式編程,這又是什么?”就像面向對象編程一樣,它是另一種編程風格,其核心是把函數作為值,前面在討論Lambda的時候提到過。
Java 8的好處在于,它把函數式編程中一些最好的想法融入到了大家熟悉的Java語法中。有了這個優秀的設計選擇,你可以把函數式編程看作Java 8中一個額外的設計模式和習語,讓你可以用更少的時間,編寫更清晰、更簡潔的代碼。想想你的編程兵器庫中的利器又多了一樣。
當然,除了這些在概念上對Java有很大擴充的功能,我們也會解釋很多其他有用的Java 8功能和更新,如默認方法、新的Optional類、CompletableFuture,以及新的日期和時間API。
Java 9的更新包括一個支持通過Flow API進行反應式編程的模塊系統,以及其他各種增強功能。
別急,這只是一個概覽,現在該讓你自己去看看本書了。
本書結構
本書分為六個部分,分別是:“基礎知識”“使用流進行函數式數據處理”“使用流和Lambda進行高效編程”“無所不在的Java”“提升Java的并發性”和“函數式編程以及Java未來的演進”。我們強烈建議你按順序閱讀前兩部分的內容,因為很多概念都需要前面的章節作為基礎,后面四個部分的內容你可以按照任意順序閱讀。大多數章節都附有幾個測驗,可以幫助你學習和掌握這些內容。
第一部分旨在幫助你初步使用Java 8。學完這一部分,你將會對Lambda表達式有充分的了解,并可以編寫簡潔而靈活的代碼,能夠輕松適應不斷變化的需求。
? 第1章總結Java的主要變化(Lambda表達式、方法引用、流和默認方法),為學習后面的內容做準備。
? 第2章介紹行為參數化,這是Java 8非常依賴的一種軟件開發模式,也是引入Lambda表達式的主要原因。
? 第3章對Lambda表達式和方法引用進行全面介紹,每一步都提供了代碼示例和測驗。
第二部分詳細討論新的Stream API。通過Stream API,你將能夠寫出功能強大的代碼,以聲明性方式處理數據。學完這一部分,你將充分理解流是什么,以及如何在Java應用程序中使用它們來簡潔而高效地處理數據集。
? 第4章介紹流的概念,并解釋它們與集合有何異同。
? 第5章詳細討論為了表達復雜的數據處理查詢可以使用的流操作。其間會談到很多模式,如篩選、切片、查找、匹配、映射和歸約。
? 第6章介紹收集器——Stream API的一個功能,可以讓你表達更為復雜的數據處理查詢。
? 第7章探討流如何得以自動并行執行,并利用多核架構的優勢。此外,你還會學到為正確而高效地使用并行流,要避免的若干陷阱。
第三部分探索Java 8和Java 9的多個主題,這些主題中的技巧能讓你的Java代碼更高效,并能幫助你利用現代的編程習語改進代碼庫。這一部分的出發點是介紹高級編程思想,本書后續內容并不依賴于此。
? 第8章是這一版新增的,探討Java 8和Java 9對Collection API的增強。內容涵蓋如何使用集合工廠,如何使用新的慣用模式處理List和Set,以及使用Map的慣用模式。
? 第9章探討如何利用Java 8的新功能和一些秘訣來改善你現有的代碼。此外,該章還探討了一些重要的軟件開發技術,如設計模式、重構、測試和調試。
? 第10章也是這一版新增的,介紹依據領域特定語言(domain-specific language, DSL)實現API的思想。這不僅是一種強大的API設計方法,而且正變得越來越流行。Java中已經有API采用這種模式實現,譬如Comparator、Stream以及Collector接口。
第四部分介紹Java 8和Java 9中新增的多個特性,這些特性能幫助程序員事半功倍地編寫代碼,讓程序更加穩定可靠。我們首先從Java 8新增的兩個API入手。
? 第11章介紹java.util.Optional類,它能讓你設計出更好的API,并減少空指針異常。
? 第12章探討新的日期和時間API,這相對于以前涉及日期和時間時容易出錯的API是一大改進。
? 第13章討論默認方法是什么,如何利用它們來以兼容的方式演變API,一些實際的應用模式,以及有效使用默認方法的規則。
? 第14章是這一版新增的,探討Java的模塊系統——它是Java 9的主要改進,使大型系統能夠以文檔化和可執行的方式進行模塊化,而不是簡單地將一堆包雜亂無章地堆在一起。
第五部分探討如何使用Java的高級特性構建并發程序——注意,我們要討論的不是第6章和第7章中介紹的流的并發處理。
? 第15章是這一版新增的,從宏觀的角度介紹異步API的思想,包括Future、反應式編程背后的“發布-訂閱”協議(封裝在Java 9的Flow API中)。
? 第16章探討CompletableFuture,它可以讓你用聲明性方式表達復雜的異步計算,從而讓Stream API的設計并行化。
? 第17章也是這一版新增的,詳細介紹Java 9的Flow API,并提供反應式編程的實戰代碼解析。
第六部分是本書最后一部分,我們會談談怎么用Java編寫高效的函數式程序,還會將Java的功能和Scala做比較。
? 第18章是一個完整的函數式編程教程,會介紹一些術語,并解釋如何在Java 8中編寫函數式風格的程序。
? 第19章涵蓋更高級的函數式編程技巧,包括高階函數、柯里化、持久化數據結構、延遲列表和模式匹配。這一章既提供了可以用在代碼庫中的實際技術,也提供了能讓你成為更淵博的程序員的學術知識。
? 第20章將對比Java與Scala的功能。Scala和Java一樣,是一種在JVM上實現的語言,近年來發展迅速,在編程語言生態系統中已經威脅到了Java的一些方面。
? 第21章會回顧這段學習Java 8并慢慢走向函數式編程的歷程。此外,我們還會猜測,在Java 8、9以及10中添加的小功能之后,未來可能會有哪些增強和新功能出現。
最后,本書有四個附錄,涵蓋了與Java 8相關的其他一些話題。附錄A總結了本書未討論的一些Java 8的小特性。附錄B概述了Java庫的其他主要擴展,可能對你有用。附錄C是第二部分的延續,介紹了流的高級用法。附錄D探討了Java編譯器在幕后是如何實現Lambda表達式的。
關于代碼
所有代碼清單和正文中的源代碼都采用等寬字體(如fixed-widthfontlikethis),以與普通文字區分開來。許多代碼清單中都有注釋,突出了重要的概念。
書中示例的源代碼請至圖靈社區本書主頁http://ituring.cn/book/2659“隨書下載”處下載。
本書論壇
購買了英文版的讀者可免費訪問Manning出版社運營的一個私有在線論壇,你可以在那里發表對圖書的評論、詢問技術問題,并獲得作者和其他用戶的幫助,網址為:https://forums.manning.com/forums/modern-java-in-action。如欲了解Manning論壇以及論壇上的行為守則,請訪問https://forums.manning.com/forums/about。
Manning對讀者的承諾是提供一個平臺,供讀者之間以及讀者和作者之間進行有意義的對話。但這并不意味著作者會有任何特定程度的參與。他們對論壇的貢獻是完全自愿的(且無報酬)。我們建議你試著詢問作者一些有挑戰性的問題,以免他們失去興趣。只要書仍在發行,你就可以在出版商網站上訪問作者在線論壇和先前所討論內容的歸檔文件。
讀者也可登錄圖靈社區本書主頁http://ituring.cn/book/2659提交反饋意見和勘誤。
電子書
掃描如下二維碼,即可購買本書電子版。

- 深入理解Bootstrap
- 潮流:UI設計必修課
- C語言程序設計實訓教程
- Oracle BAM 11gR1 Handbook
- Python機器學習經典實例
- Windows Server 2016 Automation with PowerShell Cookbook(Second Edition)
- Jupyter數據科學實戰
- Android開發案例教程與項目實戰(在線實驗+在線自測)
- BIM概論及Revit精講
- Extending Puppet(Second Edition)
- 低代碼平臺開發實踐:基于React
- Java系統化項目開發教程
- 區塊鏈技術進階與實戰(第2版)
- Java EE 7 with GlassFish 4 Application Server
- Web前端開發全程實戰:HTML5+CSS3+JavaScript+jQuery+Bootstrap