本書(shū)是經(jīng)典的《Java核心技術(shù) 卷Ⅱ:高級(jí)特性》的新版。這一版對(duì)全書(shū)進(jìn)行了全面更新,以反映Java SE 9、Java SE 10和Java SE 11的特性。本書(shū)是Java技術(shù)權(quán)威指南,全面覆蓋Java技術(shù)的高級(jí)主題,包括流,輸入與輸出,XML,網(wǎng)絡(luò)API,數(shù)據(jù)庫(kù)編程,日期與時(shí)間API,國(guó)際化,腳本、編譯與注解處理,Java平臺(tái)模塊系統(tǒng),安全,本地方法等內(nèi)容。本書(shū)對(duì)Java技術(shù)的闡述精確到位,敘述方式深入淺出,并包含大量程序示例,從而幫助讀者充分理解Java語(yǔ)言以及Java類庫(kù)的相關(guān)高級(jí)特性。本書(shū)適合想將Java應(yīng)用于實(shí)際項(xiàng)目的軟件開(kāi)發(fā)人員、高等院校教師和學(xué)生參考閱讀。
作者簡(jiǎn)介
凱·S. 霍斯特曼(Cay S. Horstmann) 圣何塞州立大學(xué)計(jì)算機(jī)科學(xué)教授,“Java大師”(Java Champion)。他是多卷本的《Java核心技術(shù)》《寫(xiě)給大忙人看的Java核心技術(shù)(第2 版)》以及《快學(xué)Scala(第2 版)》的作者。他還編寫(xiě)了很多針對(duì)專業(yè)程序員和計(jì)算機(jī)科學(xué)專業(yè)學(xué)生的其他圖書(shū)。
圖書(shū)目錄
Chapter 1: Streams / 流 1 1.1 From Iterating to Stream Operations / 從迭代到流操作 2 1.2 Stream Creation / 流的創(chuàng)建 5 1.3 The filter, map, and flatMap Methods / filter、map和flatMap方法 11 1.4 Extracting Substreams and Combining Streams / 提取子流和組合流 12 1.5 Other Stream Transformations / 其他流變換 14 1.6 Simple Reductions / 簡(jiǎn)單規(guī)約 15 1.7 The Optional Type / Optional類型 16 1.7.1 Getting an Optional Value / 獲得Optional值 17 1.7.2 Consuming an Optional Value / 消耗Optional值 17 1.7.3 Pipelining Optional Values / 流水線式的使用Optional值 18 1.7.4 How Not to Work with Optional Values / 避免錯(cuò)誤使用Optional值 19 1.7.5 Creating Optional Values / 創(chuàng)建Optional值 20 1.7.6 Composing Optional Value Functions with flatMap / 使用flatMap組合Optional值函數(shù) 21 1.7.7 Turning an Optional into a Stream / 將Optional值變到流中 22 1.8 Collecting Results / 收集結(jié)果 25 1.9 Collecting into Maps / 收集到Map中 30 1.10 Grouping and Partitioning / 分組與分區(qū) 34 1.11 Downstream Collectors / 下游的收集器 36 1.12 Reduction Operations / 規(guī)約操作 41 1.13 Primitive Type Streams / 基本類型的流 43 1.14 Parallel Streams / 并行流 48 Chapter 2: Input and Output / 輸入與輸出 55 2.1 Input / Output Streams / 輸入/輸出流 56 2.1.1 Reading and Writing Bytes / 讀寫(xiě)字節(jié) 56 2.1.2 The Complete Stream Zoo / 流譜系概覽 59 2.1.3 Combining Input/Output Stream Filters / 組合輸入/輸出流過(guò)濾器 63 2.1.4 Text Input and Output / 文本輸入與輸出 68 2.1.5 How to Write Text Output / 輸出文本 68 2.1.6 How to Read Text Input / 輸入文本 70 2.1.7 Saving Objects in Text Format / 以文本格式保存對(duì)象 72 2.1.8 Character Encodings / 字符編碼 75 2.2 Reading and Writing Binary Data / 讀寫(xiě)二進(jìn)制數(shù)據(jù) 78 2.2.1 The DataInput and DataOutput interfaces / DataInput和DataOutput接口 78 2.2.2 Random-Access Files / 隨機(jī)訪問(wèn)文件 80 2.2.3 ZIP Archives / ZIP文檔 85 2.3 Object Input/Output Streams and Serialization / 對(duì)象輸入/輸出流與序列化 88 2.3.1 Saving and Loading Serializable Objects / 序列化對(duì)象的保存與加載 88 2.3.2 Understanding the Object Serialization File Format / 理解對(duì)象序列化文件格式 93 2.3.3 Modifying the Default Serialization Mechanism / 修改默認(rèn)的序列化機(jī)制 100 2.3.4 Serializing Singletons and Typesafe Enumerations / 序列化單例和類型安全的枚舉 102 2.3.5 Versioning / 版本管理 103 2.3.6 Using Serialization for Cloning / 將序列化用于克隆 106 2.4 Working with Files / 處理文件 109 2.4.1 Paths / 路徑 109 2.4.2 Reading and Writing Files / 讀寫(xiě)文件 112 2.4.3 Creating Files and Directories / 創(chuàng)建文件和目錄 113 2.4.4 Copying, Moving, and Deleting Files / 復(fù)制、移動(dòng)和刪除文件 114 2.4.5 Getting File Information / 獲取文件信息 116 2.4.6 Visiting Directory Entries / 訪問(wèn)目錄條目 118 2.4.7 Using Directory Streams / 使用目錄流 120 2.4.8 ZIP File Systems / ZIP文件系統(tǒng) 123 2.5 Memory-Mapped Files / 內(nèi)存映射文件 124 2.5.1 Memory-Mapped File Performance / 內(nèi)存映射文件的性能 125 2.5.2 The Buffer Data Structure / 緩沖區(qū)數(shù)據(jù)結(jié)構(gòu) 132 2.6 File Locking / 文件鎖 134 2.7 Regular Expressions / 正則表達(dá)式 137 2.7.1 The Regular Expression Syntax / 正則表達(dá)式語(yǔ)法 137 2.7.2 Matching a String / 匹配字符串 142 2.7.3 Finding Multiple Matches / 尋找多個(gè)匹配字符串 145 2.7.4 Splitting along Delimiters / 使用分隔符分解 147 2.7.5 Replacing Matches / 替換掉匹配字符串 148 Chapter 3: XML 153 3.1 Introducing XML / XML簡(jiǎn)介 154 3.2 The Structure of an XML Document / XML文檔的結(jié)構(gòu) 156 3.3 Parsing an XML Document / 解析XML文檔 159 3.4 Validating XML Documents / 驗(yàn)證XML文檔 169 3.4.1 Document Type Definitions / 文檔類型定義 171 3.4.2 XML Schema / XML模式 179 3.4.3 A Practical Example / 實(shí)用示例 182 3.5 Locating Information with XPath / 使用XPath定位信息 188 3.6 Using Namespaces / 使用命名空間 193 3.7 Streaming Parsers / 流解析器 196 3.7.1 Using the SAX Parser / 使用SAX解析器 197 3.7.2 Using the StAX Parser / 使用StAX解析器 202 3.8 Generating XML Documents / 生成XML文檔 206 3.8.1 Documents without Namespaces / 不帶命名空間的文檔 206 3.8.2 Documents with Namespaces / 帶命名空間的文檔 207 3.8.3 Writing Documents / 寫(xiě)文檔 208 3.8.4 Writing an XML Document with StAX / 使用StAX寫(xiě)XML文檔 210 3.8.5 An Example: Generating an SVG File / 示例:生成SVG文件 215 3.9 XSL Transformations / XSL轉(zhuǎn)換 216 Chapter 4: Networking / 網(wǎng)絡(luò) 227 4.1 Connecting to a Server / 連接到服務(wù)器 227 4.1.1 Using Telnet / 使用Telnet 227 4.1.2 Connecting to a Server with Java / 使用Java連接到服務(wù)器 230 4.1.3 Socket Timeouts / 套接字超時(shí) 232 4.1.4 Internet Addresses / 因特網(wǎng)地址 234 4.2 Implementing Servers / 實(shí)現(xiàn)服務(wù)器 236 4.2.1 Server Sockets / 服務(wù)器套接字 236 4.2.2 Serving Multiple Clients / 服務(wù)多個(gè)客戶端 239 4.2.3 Half-Close / 半關(guān)閉 243 4.2.4 Interruptible Sockets / 可中斷套接字 244 4.3 Getting Web Data / 獲取Web數(shù)據(jù) 251 4.3.1 URLs and URIs / URL和URI 251 4.3.2 Using a URLConnection to Retrieve Information / 使用URLConnection獲取信息 254 4.3.3 Posting Form Data / 提交表單數(shù)據(jù) 261 4.4 The HTTP Client / HTTP客戶端 271 4.5 Sending E-Mail / 發(fā)送E-Mail 278 Chapter 5: Database Programming / 數(shù)據(jù)庫(kù)編程 283 5.1 The Design of JDBC / JDBC的設(shè)計(jì) 284 5.1.1 JDBC Driver Types / JDBC驅(qū)動(dòng)程序分類 285 5.1.2 Typical Uses of JDBC / JDBC的典型用法 286 5.2 The Structured Query Language / 結(jié)構(gòu)化查詢語(yǔ)言 287 5.3 JDBC Configuration / JDBC配置 293 5.3.1 Database URLs / 數(shù)據(jù)庫(kù)URL 294 5.3.2 Driver JAR Files / 驅(qū)動(dòng)程序JAR文件 294 5.3.3 Starting the Database / 啟動(dòng)數(shù)據(jù)庫(kù) 294 5.3.4 Registering the Driver Class / 注冊(cè)驅(qū)動(dòng)程序類 295 5.3.5 Connecting to the Database / 連接到數(shù)據(jù)庫(kù) 296 5.4 Working with JDBC Statements / 使用JDBC語(yǔ)句 299 5.4.1 Executing SQL Statements / 執(zhí)行SQL語(yǔ)句 299 5.4.2 Managing Connections, Statements, and Result Sets / 管理連接、語(yǔ)句和結(jié)果集 303 5.4.3 Analyzing SQL Exceptions / 分析SQL異常 304 5.4.4 Populating a Database / 填充數(shù)據(jù)庫(kù) 306 5.5 Query Execution / 執(zhí)行查詢 310 5.5.1 Prepared Statements / 預(yù)備語(yǔ)句 311 5.5.2 Reading and Writing LOBs / 讀寫(xiě)LOB 317 5.5.3 SQL Escapes / SQL轉(zhuǎn)義 319 5.5.4 Multiple Results / 多結(jié)果集 321 5.5.5 Retrieving Autogenerated Keys / 獲取自動(dòng)生成的主鍵 322 5.6 Scrollable and Updatable Result Sets / 可滾動(dòng)和可更新的結(jié)果集 322 5.6.1 Scrollable Result Sets / 可滾動(dòng)的結(jié)果集 323 5.6.2 Updatable Result Sets / 可更新的結(jié)果集 325 5.7 Row Sets / 行集 329 5.7.1 Constructing Row Sets / 構(gòu)建行集 330 5.7.2 Cached Row Sets / 緩存的行集 330 5.8 Metadata / 元數(shù)據(jù) 334 5.9 Transactions / 事務(wù) 344 5.9.1 Programming Transactions with JDBC / 使用JDBC編程實(shí)現(xiàn)事務(wù) 344 5.9.2 Save Points / 保存點(diǎn) 345 5.9.3 Batch Updates / 批量更新 345 5.9.4 Advanced SQL Types / 高級(jí)SQL類型 348 5.10 Connection Management in Web and Enterprise Applications / Web與企業(yè)應(yīng)用中的連接管理 349 Chapter 6: The Date and Time API / 日期與時(shí)間API 353 6.1 The Time Line / 時(shí)間線 354 6.2 Local Dates / 本地日期 358 6.3 Date Adjusters / 日期調(diào)整 364 6.4 Local Time / 本地時(shí)間 365 6.5 Zoned Time / 時(shí)區(qū)時(shí)間 367 6.6 Formatting and Parsing / 格式化與解析 371 6.7 Interoperating with Legacy Code / 與遺留代碼互操作 376 Chapter 7: Internationalization / 國(guó)際化 379 7.1 Locales / 地域 380 7.1.1 Why Locales / 為什么要引入地域類 380 7.1.2 Specifying Locales / 指定地域 381 7.1.3 The Default Locale / 默認(rèn)地域 384 7.1.4 Display Names / 顯示地域名 384 7.2 Number Formats / 數(shù)字格式 387 7.2.1 Formatting Numeric Values / 格式化數(shù)字值 387 7.2.2 Currencies / 貨幣 393 7.3 Date and Time / 日期與時(shí)間 394 7.4 Collation and Normalization / 排序規(guī)則與標(biāo)準(zhǔn)化 402 7.5 Message Formatting / 消息格式化 409 7.5.1 Formatting Numbers and Dates / 格式化數(shù)字和日期 409 7.5.2 Choice Formats / choice格式化選項(xiàng) 411 7.6 Text Input and Output / 文本輸入與輸出 413 7.6.1 Text Files / 文本文件 414 7.6.2 Line Endings / 文本行結(jié)尾符號(hào) 414 7.6.3 The Console / 控制臺(tái) 414 7.6.4 Log Files / 日志文件 415 7.6.5 The UTF-8 Byte Order Mark / UTF-8字節(jié)順序標(biāo)記 415 7.6.6 Character Encoding of Source Files / 源文件的字符編碼 416 7.7 Resource Bundles / 資源包 417 7.7.1 Locating Resource Bundles / 定位資源包 417 7.7.2 Property Files / 屬性文件 418 7.7.3 Bundle Classes / 包類 419 7.8 A Complete Example / 完整示例 421 Chapter 8: Scripting, Compiling, and Annotation Processing / 腳本、編譯與注解處理 439 8.1 Scripting for the Java Platform / Java平臺(tái)的腳本 440 8.1.1 Getting a Scripting Engine / 獲得腳本引擎 440 8.1.2 Script Evaluation and Bindings / 腳本求值與綁定 441 8.1.3 Redirecting Input and Output / 重定向輸入輸出 444 8.1.4 Calling Scripting Functions and Methods / 調(diào)用腳本函數(shù)和方法 444 8.1.5 Compiling a Script / 編譯腳本 446 8.1.6 An Example: Scripting GUI Events / 示例:用腳本處理GUI事件 447 8.2 The Compiler API / 編譯器API 452 8.2.1 Invoking the Compiler / 調(diào)用編譯器 453 8.2.2 Launching a Compilation Task / 啟動(dòng)編譯任務(wù) 453 8.2.3 Capturing Diagnostics / 捕獲診斷信息 454 8.2.4 Reading Source Files from Memory / 從內(nèi)存讀取源文件 454 8.2.5 Writing Byte Codes to Memory / 將字節(jié)碼寫(xiě)入內(nèi)存 455 8.2.6 An Example: Dynamic Java Code Generation / 示例:動(dòng)態(tài)Java代碼生成 457 8.3 Using Annotations / 使用注解 463 8.3.1 An Introduction into Annotations / 注解簡(jiǎn)介 464 8.3.2 An Example: Annotating Event Handlers / 示例:注解事件處理程序 465 8.4 Annotation Syntax / 注解語(yǔ)法 471 8.4.1 Annotation Interfaces / 注解接口 471 8.4.2 Annotations / 注解 473 8.4.3 Annotating Declarations / 在聲明的地方使用注解 475 8.4.4 Annotating Type Uses / 在類型使用的地方使用注解 476 8.4.5 Annotating this / 對(duì)this做注解 477 8.5 Standard Annotations / 標(biāo)準(zhǔn)注解 478 8.5.1 Annotations for Compilation / 用于編譯的注解 480 8.5.2 Annotations for Managing Resources / 用于管理資源的注解 480 8.5.3 Meta-Annotations / 元注解 481 8.6 Source-Level Annotation Processing / 源碼級(jí)注解處理 484 8.6.1 Annotation Processors / 注解處理器 484 8.6.2 The Language Model API / 語(yǔ)言模型API 485 8.6.3 Using Annotations to Generate Source Code / 使用注解生成源代碼 486 8.7 Bytecode Engineering / 字節(jié)碼工程 489 8.7.1 Modifying Class Files / 修改類文件 490 8.7.2 Modifying Bytecodes at Load Time / 在加載時(shí)修改字節(jié)碼 495 Chapter 9: The Java Platform Module System / Java平臺(tái)模塊系統(tǒng) 499 9.1 The Module Concept / 模塊概念 500 9.2 Naming Modules / 命名模塊 501 9.3 The Modular“Hello, World!”Program / 模塊化的“Hello, World!”程序 502 9.4 Requiring Modules / 請(qǐng)求模塊 504 9.5 Exporting Packages / 導(dǎo)出包 506 9.6 Modular JARs / 模塊化的JAR文件 510 9.7 Modules and Reflective Access / 模塊與反射訪問(wèn) 511 9.8 Automatic Modules / 自動(dòng)模塊 515 9.9 The Unnamed Module / 未命名模塊 517 9.10 Command-Line Flags for Migration / 用于遷移的命令行標(biāo)志 518 9.11 Transitive and Static Requirements / 傳遞和靜態(tài)請(qǐng)求 519 9.12 Qualified Exporting and Opening / 限制導(dǎo)出和打開(kāi) 521 9.13 Service Loading / 服務(wù)加載 522 9.14 Tools for Working with Modules / 處理模塊的工具 524 Chapter 10: Security / 安全 529 10.1 Class Loaders / 類加載器 530 10.1.1 The Class-Loading Process / 類加載流程 530 10.1.2 The Class Loader Hierarchy / 類加載器層次結(jié)構(gòu) 532 10.1.3 Using Class Loaders as Namespaces / 將類加載器作為命名空間 534 10.1.4 Writing Your Own Class Loader / 編寫(xiě)自己的類加載器 534 10.1.5 Bytecode Verification / 字節(jié)碼驗(yàn)證 541 10.2 Security Managers and Permissions / 安全管理器與權(quán)限 546 10.2.1 Permission Checking / 權(quán)限檢查 546 10.2.2 Java Platform Security / Java平臺(tái)安全 547 10.2.3 Security Policy Files / 安全策略文件 551 10.2.4 Custom Permissions / 定制權(quán)限 559 10.2.5 Implementation of a Permission Class / 實(shí)現(xiàn)權(quán)限類 560 10.3 User Authentication / 用戶認(rèn)證 566 10.3.1 The JAAS Framework / JAAS框架 566 10.3.2 JAAS Login Modules / JAAS登錄模塊 573 10.4 Digital Signatures / 數(shù)字簽名 582 10.4.1 Message Digests / 消息摘要 583 10.4.2 Message Signing / 消息簽名 587 10.4.3 Verifying a Signature / 驗(yàn)證簽名 589 10.4.4 The Authentication Problem / 認(rèn)證問(wèn)題 592 10.4.5 Certificate Signing / 證書(shū)簽名 594 10.4.6 Certificate Requests / 證書(shū)請(qǐng)求 596 10.4.7 Code Signing / 代碼簽名 597 10.5 Encryption / 加密 599 10.5.1 Symmetric Ciphers / 對(duì)稱密碼 600 10.5.2 Key Generation / 生成密鑰 602 10.5.3 Cipher Streams / 加密流 607 10.5.4 Public Key Ciphers / 公鑰密碼 608 Chapter 11: Advanced Swing and Graphics / 高級(jí)Swing和圖形編程 613 11.1 Tables / 表格 613 11.1.1 A Simple Table / 簡(jiǎn)單表格 614 11.1.2 Table Models / 表格模式 618 11.1.3 Working with Rows and Columns / 行列操作 622 11.1.3.1 Column Classes / 列類 622 11.1.3.2 Accessing Table Columns / 訪問(wèn)表列 623 11.1.3.3 Resizing Columns / 調(diào)整列 624 11.1.3.4 Resizing Rows / 調(diào)整行 625 11.1.3.5 Selecting Rows, Columns, and Cells / 選擇行、列和單元格 626 11.1.3.6 Sorting Rows / 對(duì)行進(jìn)行排序 627 11.1.3.7 Filtering Rows / 對(duì)行進(jìn)行過(guò)濾 628 11.1.3.8 Hiding and Displaying Columns / 隱藏或顯示列 630 11.1.4 Cell Rendering and Editing / 單元格的繪制和編輯 639 11.1.4.1 Rendering Cells / 繪制單元格 639 11.1.4.2 Rendering the Header / 繪制表頭 641 11.1.4.3 Editing Cells / 編輯單元格 641 11.1.4.4 Custom Editors / 定制編輯器 642 11.2 Trees / 樹(shù) 652 11.2.1 Simple Trees / 簡(jiǎn)單的樹(shù) 654 11.2.2 Node Enumeration / 節(jié)點(diǎn)枚舉 672 11.2.3 Rendering Nodes / 渲染節(jié)點(diǎn) 674 11.2.4 Listening to Tree Events / 監(jiān)聽(tīng)樹(shù)事件 677 11.2.5 Custom Tree Models / 定制樹(shù)模型 684 11.3 Advanced AWT / 高級(jí)AWT 693 11.3.1 The Rendering Pipeline / 繪制圖形的流程 694 11.3.2 Shapes / 形狀 696 11.3.2.1 The Shape Class Hierarchy / Shape類層次結(jié)構(gòu) 697 11.3.2.2 Using the Shape Classes / 使用各種Shape類 698 11.3.3 Areas / 區(qū)域 714 11.3.4 Strokes / 畫(huà)筆 715 11.3.5 Paint / 著色 724 11.3.6 Coordinate Transformations / 坐標(biāo)變換 727 11.3.7 Clipping / 剪切 733 11.3.8 Transparency and Composition / 透明和組合 735 11.4 Raster Images / 光柵圖像 744 11.4.1 Readers and Writers for Images / 圖像的讀取器和寫(xiě)入器 745 11.4.1.1 Obtaining Readers and Writers for Image File Types / 獲取圖像文件類型的讀取器和寫(xiě)入器 745 11.4.1.2 Reading and Writing Files with Multiple Images / 讀寫(xiě)包含多個(gè)圖像的文件 747 11.4.2 Image Manipulation / 圖像處理 756 11.4.2.1 Constructing Raster Images / 構(gòu)建光柵圖像 756 11.4.2.2 Filtering Images / 圖像過(guò)濾 763 11.5 Printing / 打印 772 11.5.1 Graphics Printing / 圖形打印 772 11.5.2 Multiple-Page Printing / 多頁(yè)打印 782 11.5.3 Print Services / 打印服務(wù) 792 11.5.4 Stream Print Services / 流打印服務(wù) 796 11.5.5 Printing Attributes / 打印屬性 799 Chapter 12: Native Methods / 本地方法 809 12.1 Calling a C Function from a Java Program / 從Java程序中調(diào)用C函數(shù) 810 12.2 Numeric Parameters and Return Values / 數(shù)值參數(shù)與返回值 817 12.3 String Parameters / 字符串參數(shù) 819 12.4 Accessing Fields / 訪問(wèn)字段 825 12.4.1 Accessing Instance Fields / 訪問(wèn)實(shí)例字段 825 12.4.2 Accessing Static Fields / 訪問(wèn)靜態(tài)字段 829 12.5 Encoding Signatures / 編碼簽名 831 12.6 Calling Java Methods / 調(diào)用Java方法 832 12.6.1 Instance Methods / 實(shí)例方法 833 12.6.2 Static Methods / 靜態(tài)方法 834 12.6.3 Constructors / 構(gòu)造器 835 12.6.4 Alternative Method Invocations / 其他調(diào)用方法的手段 835 12.7 Accessing Array Elements / 訪問(wèn)數(shù)組元素 840 12.8 Handling Errors / 處理錯(cuò)誤 844 12.9 Using the Invocation API / 使用Invocation API 849 12.10 A Complete Example: Accessing the Windows Registry / 完整示例:訪問(wèn)Windows注冊(cè)表 855 12.10.1 Overview of the Windows Registry / Windows注冊(cè)表簡(jiǎn)介 855 12.10.2 A Java Platform Interface for Accessing the Registry / 訪問(wèn)注冊(cè)表的Java平臺(tái)接口 856 12.10.3 Implementation of Registry Access Functions as Native Methods / 以本地方法方式實(shí)現(xiàn)注冊(cè)表訪問(wèn)功能 857