Java核心技術 卷II:高級特性(原書第12版)
定 價:¥149
中 教 價:¥87.91 (5.90折)促銷
庫 存 數: 3
叢 書 名:Java核心技術系列
伴隨著Java的成長,《Java核心技術》從第1版到第11版一路走來,得到了廣大Java程序設計人員的青睞,成為一本暢銷不衰的Java經典圖書。本書經全面修訂,以涵蓋Java 17的新特性。本書由獲Jolt大獎并擁有20多年教學與研究經驗的資深Java技術專家撰寫,針對Java 17進行了全面更新。卷II 全面闡述Java高級特性,幫助你提升開發能力和技巧 全書共分12章。第1章介紹了Java中的流。第2章涵蓋了輸入/輸出處理,包括讀寫文件和正則表達式。第3章介紹了XML,展示如何解析XML文件、生成XML和使用XSL轉換。第4章講解了網絡API,以及怎樣連接到服務器、實現自己的服務器、創建HTTP連接,并討論了HTTP客戶端。第5章介紹了數據庫編程,重點講解JDBC,即Java數據庫連接API。第6章涵蓋了如何使用日期和時間API來處理日期及時區。第7章討論了國際化。第8章介紹了3種代碼處理技術。第9章講解了從Java 9開始引入的Java平臺模塊系統,以促進Java平臺和核心類庫的有序演化。第10章繼續介紹了Java安全模型,展示怎樣編寫類加載器,以及如何使用消息摘要、代碼簽名、授權及加密等重要特性。第11章討論了高級Swing和圖形化編程,包括表格構件、樹構件、高級AWT,以及Java 2D API。第12章介紹了本地方法,這個功能支持調用為微軟Windows API這樣的特殊機制而編寫的各種方法。
建議卷Ⅰ和卷Ⅱ搭配學習。學完本書,你將成為一個真正的 Java 程序員。本書不僅讓你深入了解設計和實現 Java 應用涉及的所有基礎知識和 Java 特性,還會幫助你掌握開發 Java 程序所需的全部基本技能。相信在學習Java的道路上有了本書的輔助,你的學習一定可以做到事半功倍。
●Java極具影響力世界名著,針對Java 17全面升級,新版涵蓋了Java 17新特性;
●豆瓣9.5 高分,50位KOL聯名推薦,Java入門霸主毫無爭議,數百萬Java開發者系統學習Java的優選書籍;
●數百個幾乎可直接應用到開發實踐中的示例代碼全部免費下載;
●作者親自為本書錄制學習視頻,對書中重點和難點一一講解,相關資源可在B站Java技術核心技術站免費觀看。
致讀者本書是完整更新到Java 17的《Java核心技術》第12版的卷Ⅱ。卷Ⅰ主要介紹了Java語言的一些關鍵特性,而本卷主要介紹編程人員進行專業軟件開發時需要了解的高級主題。因此,與卷Ⅰ和之前的版本一樣,我們仍將本書讀者定位于用Java技術進行實際項目開發的編程人員。編寫任何一本書都難免會有一些錯誤或不準確的地方。我們非常樂意聽到讀者的意見。當然,我們更希望對相同問題的報告只出現一次。為此,我們創建了一個關于FAQ、bug修正以及應急方案的網站http:// horstmann.com/corejava。你可以在bug報告網頁的末尾處(鼓勵讀者閱讀以前的報告)添加bug報告,以此來發布bug和問題并給出建議,以便我們提高本書未來版本的質量。內容提要本書中的章節大部分是相互獨立的。你可以研究自己最感興趣的主題,并可以按照任意順序閱讀這些章節。在第1章中,你將學習Java的流,它帶來了現代風格的數據處理機制,即只需要指定想要的結果,而無須詳細描述應該如何獲得該結果。這使得流可以專注于優化的計算策略,對于優化并發計算來說,這顯得特別有利。第2章的主題是輸入/輸出處理。在Java中,所有I/O都是通過輸入/輸出流來處理的。這些流(不要與第1章的那些流混淆了)使你可以按照統一的方式來處理與各種數據源之間的通信,例如文件、網絡連接或內存塊。我們對各種讀入器和寫出器類進行了詳細的討論,它們使得對Unicode的處理變得很容易。我們還展示了使用對象序列化機制使保存和加載對象變得容易而方便的方法,以及對象序列化機制背后的原理。然后,我們討論了正則表達式以及如何操作文件與路徑。該章通篇都包含了最新的Java版本中引入的廣受歡迎的改進和優化。第3章介紹XML,展示怎樣解析XML文件、怎樣生成XML以及怎樣使用XSL轉換。在一個實用示例中,我們將展示怎樣在XML中指定Swing窗體的布局。我們還討論了XPath API,它使得在XML的大海中撈針變得更加容易。第4章介紹網絡API。Java使復雜的網絡編程工作變得很容易實現。我們將介紹怎樣連接到服務器,怎樣實現你自己的服務器,以及怎樣創建HTTP連接。該章還討論了新的HTTP客戶端。第5章介紹數據庫編程,重點講解JDBC,即Java數據庫連接API,這是用于將Java程序與關系數據庫進行連接的API。我們將介紹怎樣通過使用JDBC API的核心子集,編寫能夠處理實際的數據庫日常操作事務的實用程序。(如果要完整介紹JDBC API的功能,可能需要編寫一本像本書一樣厚的書才行。)Java對于處理日期和時間的類庫做出過兩次設計,而在Java 8中做出的第三次設計則極富魅力。在第6章中,你將學習如何使用新的日期和時間庫來處理日歷和時區的復雜性。第7章討論一個我們認為其重要性將會不斷提升的特性國際化。Java編程語言是少數幾種一開始就被設計為可以處理Unicode的語言之一,不過Java平臺的國際化支持則走得更遠。因此,你可以對Java應用程序進行國際化,使其不僅可以跨平臺,而且還可以跨國界。例如,我們會展示怎樣編寫一個使用英語、德語和漢語的退休金計算器。第8章討論三種處理代碼的技術。腳本機制和編譯器API允許程序去調用使用諸如JavaScript或Groovy之類的腳本語言編寫的代碼,并且允許程序去編譯Java代碼?梢允褂米⒔庀騄ava程序中添加任意信息(有時稱為元數據)。我們將展示注解處理器怎樣在源碼級別或者類文件級別上收集注解,以及怎樣運用注解來影響運行時的類行為。注解只有在工具的支持下才有用,因此,我們希望這些討論能夠幫助你根據需要選擇有用的注解處理工具。第9章講解從Java 9開始引入的Java平臺模塊系統,以促進Java平臺和核心類庫的有序演化。這個模塊系統提供了對包的封裝和用于描述模塊需求的機制。你將學習模塊的屬性,以便決定是否要在自己的應用程序中使用它們。即使你決定不使用,也需要了解這些新規則,這樣你才能和Java平臺以及其他模塊化的類庫交互。第10章介紹Java安全類庫中的Java安全模型、用戶認證和加密功能。你將學習有關消息、代碼簽名、授權和認證以及加密等重要特性。最后,我們以使用AES和RSA加密算法的示例進行總結。第11章討論沒有納入卷Ⅰ的所有Swing知識,尤其是重要但很復雜的樹構件和表格構件。我們還會介紹Java 2D API,你可以用它來創建寫實的圖形和特殊的效果。當然,如今已經沒有多少程序員需要編寫Swing用戶界面了,因此我們會將注意力放到在服務器端生成圖像的實用特性上。第12章介紹本地方法,這個功能支持你調用為微軟Windows API這樣的特定機器而編寫的各種方法。很顯然,這種特性具有爭議:使用本地方法,那么Java平臺的跨平臺特性將會隨之消失。但是,每個為特定平臺編寫Java應用程序的專業開發人員都需要了解這些技術,因為有時,當你與不支持Java平臺的設備或服務進行交互時,為了你的目標平臺,你可能需要求助于操作系統API。我們將通過展示如何從某個Java程序訪問Windows注冊表API來闡明這一點。所有章節都按照最新版本的Java進行了修訂,過時的材料都刪除了,對Java 17的新API都詳細地進行了討論。約定我們使用等寬字體表示計算機代碼,這種格式在眾多的計算機書籍中極為常見。各種圖標的含義如下:注釋:需要引起注意的地方。提示:有用的提示。警告:關于缺陷或危險情況的警告信息。C 注釋:本書中有許多這類提示,用于解釋Java程序設計語言和C 語言之間的不同。如果你對這部分不感興趣,可以跳過。Java平臺配備有大量的編程類庫或者應用程序編程接口(API)。當第一次使用某個API時,我們在每一節的末尾都添加了簡短的描述。這些描述可能有點不太規范,但是比官方在線API文檔更具指導性。類、接口或方法名后面的數字是JDK的版本,表示在該版本中才引入了相應的特性。?應用程序編程接口 本書示例代碼以程序清單的形式列舉出來,例如:程序清單0-1 ScriptTest.java可以從網站http://horstmann.com/corejava下載示例代碼。致 謝寫一本書需要投入大量的精力,升級一本書也并不像想象的那樣輕松,尤其是Java技術一直在持續不斷地更新。出版一本書會讓很多人耗費很多心血,在此衷心地感謝《Java核心技術》小組的每一位成員。Pearson公司的許多人提供了非常有價值的幫助,卻甘愿做幕后英雄。在此,我希望大家都能夠知道我對他們努力的感恩。與以往一樣,我要真誠地感謝我的編輯Greg Doench,從本書的寫作到出版他一直在給予我們指導,同時感謝那些不知其姓名的為本書做出貢獻的幕后人士。非常感謝Julie Nahil在圖書制作方面給予的支持,感謝Dmitry Kirsanov和Alina Kirsanova完成手稿的編輯與排版工作。感謝早期版本的許多讀者,他們指出了許多令人尷尬的錯誤并給出了許多具有建設性的修改意見。我還要特別感謝本書優秀的審校小組,他們仔細地審閱我的手稿,使本書減少了許多錯誤。這一版及以前版本是由以下人員評審的:Chuck Allison(猶他谷大學)、Lance Anderson(Oracle)、Gail Anderson(Anderson Software Group)、Paul Anderson(Anderson Software Group)、Alec Beaton(IBM)、Cliff Berg、Andrew Binstock(Oracle)、Joshua Bloch、David Brown、Corky Cartwright、Frank Cohen(PushToTest)、Chris Crane(devXsolution)、NicholasJ. De Lillo博士(曼哈頓學院)、Rakesh Dhoopar(Oracle)、Robert Evans(資深教師,約翰斯·霍普金斯大學應用物理實驗室)、David Geary(Clarity Training)、Jim Gish(Oracle)、Brian Goetz(Oracle)、Angela Gordon、Dan Gordon(Electric Cloud)、Rob Gordon、John Gray(哈特福德大學)、Cameron Gregory(olabs.com)、Steve Haines、Marty Hall(coreservlets.com, Inc.)、Vincent Hardy(Adobe Systems)、Dan Harkey(圣何塞州立大學)、William Higgins(IBM)、Marc Hoffmann(mtrail)、Vladimir Ivanovic(PointBase)、Jerry Jackson(CA Technologies)、Heinz Kabutz(Java Specialists)、Stepan V. Kalinin(I-Teco/Servionica LTD)、Tim Kimmet(Walmart)、Chris Laffra、Charlie Lai(Apple)、Angelika Langer、Jeff Langr(Langr Software Solutions)、Doug Langston、Hang Lau(麥吉爾大學)、Mark Lawrence、Doug Lea(紐約州立大學奧斯威戈分校)、Gregory Longshore、Bob Lynch(Lynch Associates)、Philip Milne(顧問)、Mark Morrissey(俄勒岡研究生院)、Mahesh Neelakanta(佛羅里達大西洋大學)、José Paumard(Oracle)、Hao Pham、Paul Philion、Blake Ragsdell、Ylber Ramadani(瑞爾森大學)、Stuart Reges(亞利桑那大學)、Simon Ritter(Azul Systems)、Rich Rosen(Interactive Data Corporation)、Peter Sanders(法國尼斯ESSI大學)、Paul Sanghera博士(圣何塞州立大學和布魯克斯學院)、Paul Sevinc(Teamup AG)、Devang Shah(Sun Microsystems)、Yoshiki Shiabata、Richard Slywczak(NASA/Glenn研究中心)、Bradley A. Smith、Steven Stelting(Oracle)、Christopher Taylor、Luke Taylor(Valtech)、George Thiruvathukal、Kim Topley(StreamingEdge)、Janet Traub、Paul Tyma(顧問)、Christian Ullenboom、Peter van der Linden、Burt Walsh、JoeWang(Oracle)、Dan Xu(Oracle)和John Zavgren(Oracle)。Cay S. Horstmann2022年1月于德國柏林
凱·S. 霍斯特曼(Cay S. Horstmann)美國圣何塞州立大學計算機科學系教授、Java技術的堅定倡導者、國際計算機協會(ACM)計算機教育貢獻杰出會士,常年在國際上的各類計算機峰會上進行技術分享,為硅谷輸送計算機專業人才30余年。他是《Java核心技術》兩卷本的作者,并著有Core Java SE 9 for the Impatient, Second Edition(Addison-Wesley, 2018)和Scala for the Impatient, Second Edition(Addison- Wesley, 2017)。他還為專業程序員和計算機科學專業的學生撰寫過數十本其他圖書。
譯者序前言致謝第1章 流 11.1 從迭代到流的操作 11.2 流的創建 31.3 filter、map和filatMap方法 81.4 抽取子流和組合流 101.5 其他的流轉換 111.6 簡單約簡 121.7 Optional類型 131.7.1 獲取Optional值 131.7.2 消費Optional值 141.7.3 管道化Optional值 151.7.4 不適合使用Optional值的方式 151.7.5 創建Optional值 171.7.6 用f?latMap構建Optional值的 函數 171.7.7 將Optional轉換為流 181.8 收集結果 201.9 收集到映射表中 241.10 群組和分區 271.11 下游收集器 281.12 約簡操作 331.13 基本類型流 341.14 并行流 39第2章 輸入與輸出 432.1 輸入/輸出流 432.1.1 讀寫字節 432.1.2 完整的流家族 462.1.3 組合輸入/輸出流過濾器 502.1.4 文本輸入與輸出 532.1.5 如何寫出文本輸出 532.1.6 如何讀入文本輸入 552.1.7 以文本格式存儲對象 562.1.8 字符編碼方式 592.2 讀寫二進制數據 612.2.1 DataInput和DataOutput接口 612.2.2 隨機訪問文件 632.2.3 ZIP文檔 672.3 對象輸入/輸出流與序列化 702.3.1 保存和加載序列化對象 702.3.2 理解對象序列化的文件格式 742.3.3 修改默認的序列化機制 792.3.4 readResolve和writeReplace方法 822.3.5 版本管理 842.3.6 為克隆使用序列化 862.3.7 反序列化和安全 882.4 操作文件 902.4.1 Path 902.4.2 讀寫文件 922.4.3 創建文件和目錄 932.4.4 復制、移動和刪除文件 942.4.5 獲取文件信息 962.4.6 訪問目錄中的項 972.4.7 使用目錄流 982.4.8 ZIP文件系統 1012.5 內存映射文件 1022.5.1 內存映射文件的性能 1022.5.2 緩沖區數據結構 1082.6 文件加鎖機制 1102.7 正則表達式 1122.7.1 正則表達式語法 1122.7.2 匹配整個字符串 1152.7.3 找出字符串中的所有匹配 1162.7.4 群組 1172.7.5 用分隔符來分割 1192.7.6 替換匹配 1202.7.7 標志 120第3章 XML 1243.1 XML概述 1243.2 XML文檔的結構 1263.3 解析XML文檔 1283.4 驗證XML文檔 1373.4.1 文檔類型定義 1373.4.2 XML Schema 1443.4.3 一個實踐示例 1463.5 使用XPath來定位信息 1523.6 使用命名空間 1563.7 流機制解析器 1583.7.1 使用SAX解析器 1583.7.2 使用StAX解析器 1633.8 生成XML文檔 1663.8.1 不帶命名空間的文檔 1663.8.2 帶命名空間的文檔 1673.8.3 寫出文檔 1673.8.4 使用StAX寫出XML文檔 1693.8.5 示例:生成SVG文件 1743.9 XSL轉換 175第4章 網絡 1844.1 連接到服務器 1844.1.1 使用telnet 1844.1.2 用Java連接到服務器 1864.1.3 套接字超時 1884.1.4 因特網地址 1894.2 實現服務器 1904.2.1 服務器套接字 1904.2.2 為多個客戶端服務 1934.2.3 半關閉 1964.2.4 可中斷套接字 1974.3 獲取Web數據 2034.3.1 URL和URI 2034.3.2 使用URLConnection獲取信息 2054.3.3 提交表單數據 2114.4 HTTP客戶端 2194.4.1 HttpClient類 2194.4.2 HttpRequest類和體發布器 2204.4.3 HttpResponse接口和體處理器 2204.4.4 異步處理 2214.5 發送E-mail 226第5章 數據庫編程 2295.1 JDBC的設計 2295.1.1 JDBC驅動程序類型 2305.1.2 JDBC的典型用法 2315.2 結構化查詢語言 2315.3 JDBC配置 2365.3.1 數據庫URL 2365.3.2 驅動程序JAR文件 2375.3.3 啟動數據庫 2375.3.4 注冊驅動器類 2385.3.5 連接到數據庫 2385.4 使用JDBC語句 2415.4.1 執行SQL語句 2415.4.2 管理連接、語句和結果集 2445.4.3 分析SQL異常 2445.4.4 組裝數據庫 2465.5 執行查詢操作 2505.5.1 預備語句 2505.5.2 讀寫LOB 2565.5.3 SQL轉義 2575.5.4 多結果集 2595.5.5 獲取自動生成的鍵 2605.6 可滾動和可更新的結果集 2605.6.1 可滾動的結果集 2605.6.2 可更新的結果集 2625.7 行集 2655.7.1 構建行集 2665.7.2 被緩存的行集 2665.8 元數據 2695.9 事