商品簡介
《深入理解Java 7:核心技術與最佳實踐》是學習Java 7新功能和新特性以及深入理解Java核心技術的最佳選擇之一。經過近6年的等待,Java迎來了它的又一個歷史性的版本—Java 7。Java 7在提高開發人員的生產效率、平臺性能和模塊方向上又邁進了一步,變得更加強大和靈活。本書不僅對Java 7的所有重要更新進行了全面的解讀,而且還對Java平臺的核心技術的底層實現進行了深入探討,包含大量最佳實踐。
全書的主要內容可分為三大部分:第一部分是1~6章,全面闡釋Java 7在語法、JVM、類庫和API等方面的所有重要新功能和新特性,掌握這部分內容有助于大幅度提升編碼效率和提高代碼質量;第二部分是7~13章,對JVM、Java源代碼和字節代碼操作、類加載器、對象生命周期、多線程、并發編程、泛型、安全等Java平臺的核心技術進行了深入解析,掌握這部分內容有助于深入理解Java的底層原理;第三部分為第14章,是對Java 8的展望,簡要介紹了Java 8中將要增加的新特性。
名人推薦
全面闡釋Java 7在語法、JVM、類庫和API等方面的所有重要新功能和新特性,可幫助開發者大幅度提升編碼效率和提高代碼質量。
對JVM、源代碼和字節代碼操作、類加載器、對象生命周期、多線程、并發編程、泛型、安全等Java平臺的核心技術進行了深入解析,包含大量最佳實踐。
目次
前 言
Java的挑戰與展望
第1章 Java 7語法新特性
1.1 Coin項目介紹
1.2 在switch語句中使用字符串
1.2.1 基本用法
1.2.2 實現原理
1.2.3 枚舉類型
1.3 數值字面量的改進
1.3.1 二進制整數字面量
1.3.2 在數值字面量中使用下劃線
1.4 優化的異常處理
1.4.1 異常的基礎知識
1.4.2 創建自己的異常
1.4.3 處理異常
1.4.4 Java 7的異常處理新特性
1.5 try-with-resources語句
1.6 優化變長參數的方法調用
1.7 小結
第2章 Java語言的動態性
2.1 腳本語言支持API
2.1.1 腳本引擎
2.1.2 語言綁定
2.1.3 腳本執行上下文
2.1.4 腳本的編譯
2.1.5 方法調用
2.1.6 使用案例
2.2 反射API
2.2.1 獲取構造方法
2.2.2 獲取域
2.2.3 獲取方法
2.2.4 操作數組
2.2.5 訪問權限與異常處理
2.3 動態代理
2.3.1 基本使用方式
2.3.2 使用案例
2.4 動態語言支持
2.4.1 Java語言與Java虛擬機
2.4.2 方法句柄
2.4.3 invokedynamic指令
2.5 小結
第3章 Java IO
3.1 流
3.1.1 基本輸入流
3.1.2 基本輸出流
3.1.3 輸入流的復用
3.1.4 過濾輸入輸出流
3.1.5 其他輸入輸出流
3.1.6 字符流
3.2 緩沖區
3.2.1 基本用法
3.2.2 字節緩沖區
3.2.3 緩沖區視圖
3.3 通道
3.3.1 文件通道
3.3.2 套接字通道
3.4 NIO.2
3.4.1 文件系統訪問
3.4.2 zipjar文件系統
3.4.3 異步IO通道
3.4.4 套接字通道綁定與配置
3.4.5 IP組播通道
3.5 使用案例
3.6 小結
第4章 國際化與本地化
4.1 國際化概述
4.2 Unicode
4.2.1 Unicode編碼格式
4.2.2 其他字符集
4.2.3 Java與Unicode
4.3 Java中的編碼實踐
4.3.1 Java NIO中的編碼器和解碼器
4.3.2 亂碼問題詳解
4.4 區域設置
4.4.1 IETF BCP 47
4.4.2 資源包
4.4.3 日期和時間
4.4.4 數字和貨幣
4.4.5 消息文本
4.4.6 默認區域設置的類別
4.4.7 字符串比較
4.5 國際化與本地化基本實踐
4.6 小結
第5章 圖形用戶界面
5.1 Java圖形用戶界面概述
5.2 AWT
5.2.1 重要組件類
5.2.2 任意形狀的窗口
5.2.3 半透明窗口
5.2.4 組件混合
5.3 Swing
5.3.1 重要組件類
5.3.2 JLayer組件和LayerUI類
5.4 事件處理與線程安全性
5.4.1 事件處理
5.4.2 事件分發線程
5.4.3 SwingWorker類
5.4.4 SecondaryLoop接口
5.5 界面繪制
5.5.1 AWT中的界面繪制
5.5.2 Swing中的繪制
5.6 可插拔式外觀樣式
5.7 JavaFX
5.7.1 場景圖
5.7.2 變換
5.7.3 動畫效果
5.7.4 FXML
5.7.5 CSS外觀描述
5.7.6 Web引擎與網頁顯示
5.8 使用案例
5.9 小結
第6章 Java 7其他重要更新
6.1 關系數據庫訪問
6.1.1 使用try-with-resources語句
6.1.2 數據庫查詢的默認模式
6.1.3 數據庫連接超時時間與終止
6.1.4 語句自動關閉
6.1.5 RowSet實現提供者
6.2 java.lang包的更新
6.2.1 基本類型的包裝類
6.2.2 進程使用
6.2.3 Thread類的更新
6.3 Java實用工具類
6.3.1 對象操作
6.3.2 正則表達式
6.3.3 壓縮文件處理
6.4 JavaBeans組件
6.4.1 獲取組件信息
6.4.2 執行語句和表達式
6.4.3 持久化
6.5 小結
第7章 Java虛擬機
7.1 虛擬機基本概念
7.2 內存管理
7.3 引用類型
7.3.1 強引用
7.3.2 引用類型基本概念
7.3.3 軟引用
7.3.4 弱引用
7.3.5 幽靈引用
7.3.6 引用隊列
7.4 Java本地接口
7.4.1 JNI基本用法
7.4.2 Java程序中集成CC++代碼
7.4.3 在CC++程序中啟動Java虛擬機
7.5 HotSpot虛擬機
7.5.1 字節代碼執行
7.5.2 垃圾回收
7.5.3 啟動參數
7.5.4 分析工具
7.5.5 Java虛擬機工具接口
7.6 小結
第8章 Java源代碼和字節代碼操作
8.1 Java字節代碼格式
8.1.1 基本格式
8.1.2 常量池的結構
8.1.3 屬性
8.2 動態編譯Java源代碼
8.2.1 使用javac工具
8.2.2 Java編譯器API
8.2.3 使用Eclipse JDT編譯器
8.3 字節代碼增強
8.3.1 使用ASM
8.3.2 增強代理
8.4 注解
8.4.1 注解類型
8.4.2 創建注解類型
8.4.3 使用注解類型
8.4.4 處理注解
8.5 使用案例
8.6 小結
第9章 Java類加載器
9.1 類加載器概述
9.2 類加載器的層次結構與代理模式
9.3 創建類加載器
9.4 類加載器的隔離作用
9.5 線程上下文類加載器
9.6 Class.forName方法
9.7 加載資源
9.8 Web應用中的類加載器
9.9 OSGi中的類加載器
9.9.1 OSGi基本的類加載器機制
9.9.2 Equinox框架的類加載實現機制
9.9.3 Equinox框架嵌入到Web容器中
9.10 小結
第10章 對象生命周期
10.1 Java類的鏈接
10.2 Java類的初始化
10.3 對象的創建與初始化
10.4 對象終止
10.5 對象復制
10.6 對象序列化
10.6.1 默認的對象序列化
10.6.2 自定義對象序列化
10.6.3 對象替換
10.6.4 版本更新
10.6.5 安全性
10.6.6 使用Externalizable接口
10.7 小結
第11章 多線程與并發編程實踐
11.1 多線程
11.1.1 可見性
11.1.2 Java內存模型
11.1.3 volatile關鍵詞
11.1.4 final關鍵詞
11.1.5 原子操作
11.2 基本線程同步方式
11.2.1 synchronized關鍵詞
11.2.2 Object類的wait、notify和notifyAll方法
11.3 使用Thread類
11.3.1 線程狀態
11.3.2 線程中斷
11.3.3 線程等待、睡眠和讓步
11.4 非阻塞方式
11.5 高級實用工具
11.5.1 高級同步機制
11.5.2 底層同步器
11.5.3 高級同步對象
11.5.4 數據結構
11.5.5 任務執行
11.6 Java SE 7新特性
11.6.1 輕量級任務執行框架forkjoin
11.6.2 多階段線程同步工具
11.7 ThreadLocal類
11.8 小結
第12章 Java泛型
12.1 泛型基本概念
12.2 類型擦除
12.3 上界和下界
12.4 通配符
12.5 泛型與數組
12.6 類型系統
12.7 覆寫與重載
12.7.1 覆寫對方法類型簽名的要求
12.7.2 覆寫對返回值類型的要求
12.7.3 覆寫對異常聲明的要求
12.7.4 重載
12.8 類型推斷和<>操作符
12.9 泛型與反射API
12.10 使用案例
12.11 小結
第13章 Java安全
13.1 Java安全概述
13.2 用戶認證
13.2.1 主體、身份標識與憑證
13.2.2 登錄
13.3 權限控制
13.3.1 權限、策略與保護域
13.3.2 訪問控制權限
13.3.3 特權動作
13.3.4 訪問控制上下文
13.3.5 守衛對象
113.4 加密與解密、報文摘要和數字簽名
13.4.1 Java密碼框架
13.4.2 加密與解密
13.4.3 報文摘要
13.4.4 數字簽名
13.5 安全套接字連接
13.5.1 SSL協議
13.5.2 HTTPS
13.6 使用案例
13.7 小結
第14章 超越Java 7
14.1 lambda表達式
14.1.1 函數式接口
14.1.2 lambda表達式的語法
14.1.3 目標類型
14.1.4 詞法作用域
14.1.5 方法引用
14.1.6 接口的默認方法
14.2 Java平臺模塊化
14.3 Java SE 8的其他更新
14.4 小結
附錄A OpenJDK
附錄B Java簡史 4483.4 加密與解密、報文摘要和數字簽名
13.4.1 Java密碼框架
13.4.2 加密與解密
13.4.3 報文摘要
13.4.4 數字簽名
13.5 安全套接字連接
13.5.1 SSL協議
13.5.2 HTTPS
13.6 使用案例
13.7 小結
第14章 超越Java 7
14.1 lambda表達式
14.1.1 函數式接口
14.1.2 lambda表達式的語法
14.1.3 目標類型
14.1.4 詞法作用域
14.1.5 方法引用
14.1.6 接口的默認方法
14.2 Java平臺模塊化
14.3 Java SE 8的其他更新
14.4 小結
附錄A OpenJDK
附錄B Java簡史
書摘/試閱
第1章Java 7語法新特性
前面介紹Java所面臨的挑戰時就提到了Java語言的語法過于復雜的問題。與其他動態語言相比,利用Java語言所編寫出來的代碼不夠簡潔和直接。Java語言一直在不斷改進自身的語法,以滿足開發人員的需求。最大的改動發生在J2SE 5.0版本中。泛型、增強的for循環、基本類型的自動裝箱和拆箱機制、枚舉類型、參數長度可變的方法、靜態引入(import static)和注解等都是在這個版本中添加的。隨後的Java SE 6并沒有增加新的語法特性,而Java SE 7又增加了一些語法新特性。本章將會著重介紹這些新特性。
OpenJDK中的Coin項目(Project Coin)的目的就是為了收集對Java語言的語法進行增強的建議。最終有6個語法新特性被加入到了Java 7中。這些語法新特性涉及switch語句、整數字面量、異常處理、泛型、資源處理和參數長度可變方法的調用等。
下面將對新特性進行具體的介紹。每節是獨立的,讀者可以有選擇地閱讀自己感興趣的特性的相關章節。需要注意的是,Java 7中與泛型相關的語法新特性將在專門介紹泛型的第12章中介紹。
1.1Coin項目介紹
在介紹具體的新特性之前,有必要介紹一下Coin項目。OpenJDK中的Coin項目的目的是維護對Java語言所做的語法增強。在Coin項目開始之初,曾經廣泛地向社區征求提議。在短短的一個月時間內就收到了近70條提議。最後有9條提議被列入考慮之中。在這9條提議中,有6條成為Java 7的一部分,剩下的2條提議會在Java 8中重新考慮,還有1條提議被移到其他項目中實現。這6條被接納的提議除了本章會介紹的在switch語句中使用字符串、數值字面量的改進、優化的異常處理、try-with-resources語句和優化變長參數的方法調用之外,還包括第12章中會介紹的簡化泛型類創建的';<>';操作符。在Java 8中考慮的2條提議則分別是集合類字面量和為List和Map提供類似數組的按序號的訪問方式。
和其他對Java平臺所做的修改一樣,Coin項目所建議的修改也需要通過JCP來完成。這些改動以JSR 334(Small Enhancements to the JavaTM Programming Language)的形式提交到JCP。
1.2在switch語句中使用字符串
對于switch語句,開發人員應該都不陌生。大部分編程語言中都有類似的語法結構,用來根據某個表達式的值選擇要執行的語句塊。對于switch語句中的條件表達式類型,不同編程語言所提供的支持是不一樣的。對于Java語言來說,在Java 7之前,switch語句中的條件表達式的類型只能是與整數類型兼容的類型,包括基本類型char、byte、short和int,與這些基本類型對應的封裝類Character、Byte、Short和Integer,還有枚舉類型。這樣的限制降低了語言的靈活性,使開發人員在需要根據其他類型的表達式來進行條件選擇時,不得不增加額外的代碼來繞過這個限制。為此,Java 7放寬了這個限制,額外增加了一種可以在switch語句中使用的表達式類型,那就是很常見的字符串,即String類型。
......;