關(guān)于我們
書單推薦
新書推薦
|
Java編程思想(英文版.第4版)
本書特色:
·適合初學(xué)者與專業(yè)人員的經(jīng)典的面向?qū)ο蟮臄⑹龇绞剑粸楦碌腏ava SE5/6的相關(guān)內(nèi)容增加了新的示例和章節(jié)。
·測驗框架顯示程序輸出。
·設(shè)計模式貫穿于眾多示例中:適配器、橋接器、職責(zé)鏈、命令、裝飾器、外觀、工廠方法、享元、點名、數(shù)據(jù)傳輸對象、空對象、代理、單例、狀態(tài)、策略、模板方法以及訪問者。
·為數(shù)據(jù)傳輸引入了XML;為用戶界面引入了SWT和Flash。
·重新撰寫了有關(guān)并發(fā)的章節(jié),使您能牢牢地掌握線程的相關(guān)知識。
·專門為第4版以及Java SE5/6重寫了在700多個編譯文件中的500多個程序。
·支持網(wǎng)站包含了所有源代碼、帶注解的解決方案指南、網(wǎng)絡(luò)日志以及多媒體學(xué)習(xí)資料。
·完全覆蓋了所有基礎(chǔ)知識,同時也論述了高級特性。
·詳細徹底地闡述了面向?qū)ο笤怼?
·在線可獲得Java講座CD,包含Bruce Eckel的全部多媒體講座。
本書曾榮獲:
2003年《Software Development》雜志Jolt大獎
2002年《Java Developer’s Journal》讀者選擇圖書獎
2001年《Java World》雜志編輯推薦圖書獎
2000年《Java World》讀者選擇圖書獎
1999年《Software Development》雜志產(chǎn)品獎
1998年《Java Developer’s Journal》編輯推薦圖書獎
本書贏得了全球程序員的廣泛贊譽,即使是晦澀的概念,在Bruce Eckel的文字親和力和小而直接的編程示例面前也會化解于無形。從Java的基礎(chǔ)語法到極高級特性,本書都能逐步指導(dǎo)你輕松掌握。
Bruce Eckel是Mind View公司的總裁,該公司向客戶提供軟件咨詢和培訓(xùn)。他是C++標準委員會擁有表決權(quán)的成員之一,擁有應(yīng)用物理學(xué)學(xué)士和計算機工程碩士學(xué)位。除本書外,他還是《C++編程思想》(該書景印版及翻譯版已由機械工業(yè)出版社引進出版)的作者,并與人合著了《C++編程思想 第2卷》及其他著作。他已經(jīng)發(fā)表了150多篇論文,還經(jīng)常參加世界各地的研討會并進行演講。
讀者評論
前言
簡介
第1章 對象導(dǎo)論
1.1 抽象過程
1.2 每個對象都有一個接口
1.3 每個對象都提供服務(wù)
1.4 被隱藏的具體實現(xiàn)
1.5 復(fù)用具體實現(xiàn)
1.6 繼承
1.6.1 “是一個”(is-a)與“像是一個”(is-like-a)關(guān)系
1.7 伴隨多態(tài)的可互換對象
1.8 單根繼承結(jié)構(gòu)
1.9 容器
1.9.1 參數(shù)化類型(范型)
1.10 對象的創(chuàng)建和生命期
1.11 異常處理:處理錯誤
1.12 并發(fā)編程
1.13 Java與Internet
1.13.1 Web是什么
1.13.2 客戶端編程
1.13.3 服務(wù)器端編程
1.22 總結(jié)
第2章 一切都是對象
2.1 用引用操縱對象
2.2 必須由你創(chuàng)建所有對象
2.2.1 存儲到什么地方
2.2.2 特例:基本類型
2.2.3 Java中的數(shù)組
2.3 永遠不需要銷毀對象
2.3.1 作用域
2.3.2 對象的作用域
2.4 創(chuàng)建新的數(shù)據(jù)類型:類
2.4.1 域和方法
2.4.2 基本成員默認值
2.5 方法、參數(shù)和返回值
2.5.1 參數(shù)列表
2.6 構(gòu)建一個Java程序
2.6.1 名字可見性
2.6.2 運用其他構(gòu)件
2.6.3 static 關(guān)鍵字
2.7 你的第一個Java程序
編譯和運行
2.8 注釋和嵌入式文檔
2.8.1 注釋文檔
2.8.2 語法
2.8.3 嵌入式HTML
2.8.4 一些標簽示例
2.8.5 文檔示例
2.9 編碼風(fēng)格
2.10 總結(jié)
2.11 練習(xí)
第3章 操作符
3.1 更簡單的打印語句
3.2 使用Java操作符
3.3 優(yōu)先級
3.4 賦值
3.4.1 方法調(diào)用中的別名問題
3.5 算術(shù)操作符
3.5.1 一元加、減操作符
3.6 自動遞增和遞減
3.7 關(guān)系操作符
3.7.1 測試對象的等價性
3.8 邏輯操作符
3.8.1 短路
3.9 直接常量
3.9.1 指數(shù)記數(shù)法
3.10 按位操作符
3.11 移位操作符
3.12 三元操作符 if-else
3.13 字符串操作符 + 和 +=
3.14 使用操作符時常犯的錯誤
3.15 類型轉(zhuǎn)換操作符
3.15.1 截尾和舍入
3.15.2提升
3.16 Java沒有“sizeof”
3.17 操作符小結(jié)
3.18 總結(jié)
第4章 控制執(zhí)行流程
4.1 true和false
4.2 if-else
4.3 迭代
4.3.1 do-while
4.3.2 for
4.3.3 逗號操作符
4.4 Foreach語法
4.5 return
4.6 break和 continue
4.7 臭名昭著的“goto”
4.8 switch
4.9 總結(jié)
第5章 初始化與清理
5.1 用構(gòu)造器確保初始化
5.2 方法重載
5.2.1 區(qū)分重載方法
5.2.2 涉及基本類型的重載
5.2.3 以返回值區(qū)分重載方法
5.3 缺省構(gòu)造器
5.4 this關(guān)鍵字
5.4.1 在構(gòu)造器中調(diào)用構(gòu)造器
5.4.2 static的含義
5.5 清理:終結(jié)處理和垃圾回收
5.5.1 finalize()的用途何在
5.5.2 你必須實施清理
5.5.3 終結(jié)條件
5.5.4 垃圾回收器如何工作
5.6 成員初始化
5.6.1 指定初始化
5.7 構(gòu)造器初始化
5.7.1 初始化順序
5.7.2. 靜態(tài)數(shù)據(jù)的初始化
5.7.3. 顯式的靜態(tài)初始化
5.7.4. 非靜態(tài)實例初始化
5.8 數(shù)組初始化
5.8.1 可變參數(shù)列表
5.9 枚舉類型
5.10 總結(jié)
第6章 訪問權(quán)限控制
6.1 包:庫單元
6.1.1 代碼組織
6.1.2 創(chuàng)建獨一無二的包名
6.1.3 定制工具庫
6.1.4 用 import改變行為
6.1.5 對使用包的忠告
6.2 Java訪問權(quán)限修飾詞
6.2.1 包訪問權(quán)限
6.2.2 public:接口訪問權(quán)限
6.2.3 private: 你無法訪問
6.2.4 protected:繼承訪問權(quán)限
6.3 接口和實現(xiàn)
6.4 類的訪問權(quán)限
6.5 總結(jié)
第7章 復(fù)用類
7.1 組合語法
7.2 繼承語法
7.2.1 初始化基類
7.3 代理
7.4 結(jié)合使用組合和繼承
7.4.1 確保正確清理
7.4.2 名稱屏蔽
7.5 在組合與繼承之間選擇
7.6 protected關(guān)鍵字
7.7 向上轉(zhuǎn)型
7.7.1 為什么稱為“向上轉(zhuǎn)型”?
7.7.2 再論組合與繼承
7.8 final關(guān)鍵字
7.8.1 final 數(shù)據(jù)
7.8.2 final 方法
7.8.3 final 類
7.8.4 有關(guān)final的忠告
7.9 初始化及類的加載
7.9.1 繼承與初始化
7.10 總結(jié)
第8章 多態(tài)
8.1 再論向上轉(zhuǎn)型
8.1.1 忘記對象類型
8.2 轉(zhuǎn)機
8.2.1 方法調(diào)用綁定
8.2.2 產(chǎn)生正確的行為
8.2.3 可擴展性
8.2.4 缺陷:“覆蓋”私有方法
8.2.5 缺陷:域與靜態(tài)方法
8.3 構(gòu)造器和多態(tài)
8.3.1 構(gòu)造器的調(diào)用順序
8.3.2 繼承與清理
8.3.3 構(gòu)造器內(nèi)部的多態(tài)方法的行為
第9章 接口
9.1 抽象類和抽象方法
9.2 接口
9.3 完全解耦
9.4 Java中的“多重繼承”
9.5 通過繼承來擴展接口
9.5.1 組合接口時的名字沖突
9.6 適配接口
9.7 接口中的域
9.7.1 初始化接口中的域
9.8 嵌套接口
9.9 接口與工廠
9.10 總結(jié)
第10章 內(nèi)部類
10.1 創(chuàng)建內(nèi)部類
10.2 鏈接到外部類
10.3 使用.this與.new
10.4 內(nèi)部類與向上轉(zhuǎn)型
10.5 在方法和作用域內(nèi)的內(nèi)部類
10.6 匿名內(nèi)部類
10.6.1 再訪工廠方法
10.7 嵌套類
10.7.1 接口內(nèi)部的類
10.7.2 從多層嵌套類中訪問外部類的成員
10.8 為什么需要內(nèi)部類
10.8.1 閉包與回調(diào)
10.8.2 內(nèi)部類與控制框架
10.9 內(nèi)部類的繼承
10.10 內(nèi)部類可以被覆蓋嗎
10.11 局部內(nèi)部類
10.12 內(nèi)部類標識符
10.13 總結(jié)
第11章 持有對象
11.1 泛型和類型安全的容器
11.2 基本概念
11.3 添加一組元素
11.4 容器的打印
11.5 List
11.6 迭代器
11.6.1 ListIterator
11.7 LinkedList
11.8 Stack
11.9 Set
11.10 Map
11.11 Queue
11.11.1 PriorityQueue
11.12 Collection和Iterator
11.13 Foreach與迭代器
11.13.1 適配器方法慣用法
11.14 總結(jié)
第12章 通過異常處理錯誤
12.1 概念
12.2 基本異常
12.2.1 異常參數(shù)
12.3 捕獲異常
12.3.1 try塊
12.3.2 異常處理程序
12.4 創(chuàng)建自定義異常
12.4.1 異常與記錄日志
12.5 異常說明
12.6 捕獲所有異常
12.6.1 棧軌跡
12.6.2 重新拋出異常
12.6.3 異常鏈
12.7 Java標準異常
12.7.1 特例: RuntimeException(運行時異常)
12.8 使用finally進行清理
12.8.1 finally用來做什么
12.8.2 在return中使用finally
12.8.3 缺憾:異常丟失
12.9 異常的限制
12.10 構(gòu)造器
12.11 異常匹配
12.12 其他可選方式
12.12.1 歷史
12.12.2 觀點
12.12.3 把異常傳遞給控制臺
12.12.4 把“受檢查異!鞭D(zhuǎn)換為“不受檢查的異!
12.13 異常使用指南
12.14 總結(jié)
第13章 字符串
13.1 不可變String
13.2 重載"+"與StringBuilder
13.3 無意識的遞歸
13.4 String上的操作
13.5 格式化輸出
13.5.1 printf()
13.5.2 System.out.format()
13.5.3 Formatter類
13.5.4 格式化說明符
13.5.5 Formatter轉(zhuǎn)換
13.5.6 String.format()
13.6 正則表達式
13.6.1 基礎(chǔ)
13.6.2 創(chuàng)建正則表達式
13.6.3 限定符
13.6.4 Pattern和Matcher
13.6.5 split()
13.6.6 替換操作
13.6.7 reset()
13.6.8 正則表達式與Java I/O
13.7 掃描輸入
13.7.1 Scanner定界符
13.7.2 用正則表達式掃描
13.8 StringTokenizer
13.9 總結(jié)
第14章 類型信息
14.1 為什么需要RTTI
14.2 Class對象
14.2.1 類字面常量
14.2.2 泛化的Class引用
14.2.3 新的轉(zhuǎn)型語法
14.3類型轉(zhuǎn)換前先做檢查
14.3.1 使用類字面常量
14.3.2 動態(tài)instanceof
14.3.3 遞歸計數(shù)
14.4 注冊工廠
14.5 instanceof 與 Class的等價性
14.6 反射:運行時類信息
14.6.1 類方法抽取器
14.7 動態(tài)代理
14.8 空對象
14.8.1 模擬對象與樁
14.9 接口與類型信息
14.10 總結(jié)
第15章 泛型
15.1 與C++的比較
15.2 簡單泛型
15.2.1 一個元組類庫
15.2.2 一個棧類
15.2.3 RandomList
15.3 泛型接口
15.4 泛型方法
15.4.1 利用類型參數(shù)推斷
15.4.2 可變參數(shù)與泛型方法
15.4.3 用于Generator的泛型方法
15.4.4 一個通用的Generator
15.4.5 簡化元組的使用
15.4.6 一個Set實用工具
15.5 匿名內(nèi)部類
15.6 構(gòu)建復(fù)雜模型
15.7 擦除的神秘之處
15.7.1 C++的方式
15.7.2 遷移的可兼容性
15.7.3 擦除的問題
15.7.4 邊界處的動作
15.8 擦除的補償
15.8.1 創(chuàng)建類型實例
15.8.2 泛型數(shù)組
15.9 邊界
15.10 通配符
15.10.1 編譯器有多聰明?
15.10.2 抗變
15.10.3 無界通配符
15.10.4 捕獲轉(zhuǎn)換
15.11 問題
15.11.1 任何基本類型都不能作為類型參數(shù)
15.11.2 實現(xiàn)參數(shù)化接口
15.11.3 轉(zhuǎn)型和警告
15.11.4 重載
15.11.5 基類劫持了接口
15.12 自限定的類型
15.12.1 離奇的循環(huán)泛型
15.12.2 自限定
15.12.3 參數(shù)協(xié)變
15.13 動態(tài)類型安全
15.14 異常
15.15 混用
15.15.1 C++中的混用
15.15.2 與接口混用
15.15.3 使用裝飾器模式
15.15.4 與動態(tài)代理混用
15.16 潛在類型機制
15.17 缺乏潛在類型機制的補償
15.17.1 反射
15.17.2 將一個方法應(yīng)用于序列
15.17.3 當(dāng)你并未碰巧擁有正確的接口時
15.17.4 用適配器仿真潛在類型機制
15.18 將函數(shù)對象用作策略
15.19 總結(jié):轉(zhuǎn)型真的如此之糟嗎?
15.19.1 進階讀物
第16章 數(shù)組
16.1 數(shù)組為什么特殊
16.2 數(shù)組是第一級對象
16.3 返回一個數(shù)組
16.4 多維數(shù)組
11.5 數(shù)組與泛型
16.6 創(chuàng)建測試數(shù)據(jù)
16.6.1 Arrays.fill()
16.6.2 數(shù)據(jù)生成器(Generator)
16.6.3 從Generator中創(chuàng)建數(shù)組
16.7 Arrays實用功能
16.7.1 復(fù)制數(shù)組
16.7.2 數(shù)組的比較
16.7.3 數(shù)組元素的比較
16.7.4 數(shù)組排序
16.7.5 在已排序的數(shù)組中查找
16.8 總結(jié)
第17章 容器深入研究
17.1 完整的容器分類法
17.2 填充容器
17.2.1 一種Generator解決方案
17.2.2 Map生成器
17.2.3 使用Abstract類
17.3 Collection的功能方法
17.4 可選操作
17.4.1 未獲支持的操作
17.5 List的功能方法
17.6 Set和存儲順序
17.6.1 SortedSet
17.7 隊列
17.7.1 優(yōu)先級隊列
17.7.2 雙向隊列
17.8 理解Map
17.8.1 性能
17.8.2 SortedMap
17.8.3 LinkedHashMap
17.9 散列與散列碼
17.9.1 理解hashCode()
17.9.2 為速度而散列
17.9.3 覆蓋hashCode()
17.10 選擇接口的不同實現(xiàn)
17.10.1 性能測試框架
17.10.2 對List的選擇
17.10.3 微基準測試的危險
17.10.4 對Set的選擇
17.10.5 對Map的選擇
17.11 實用方法
17.11.1 List的排序和查詢
17.11.2 設(shè)定Collection或Map為不可修改
17.11.3 Collection或Map的同步控制
17.12 持有引用
17.12.1 WeakHashMap
17.13 Java 1.0/1.1 的容器
17.13.1 Vector 和 Enumeration
17.13.2 Hashtable
17.13.3 Stack
17.13.4 BitSet
17.14 總結(jié)
第18章 Java I/O系統(tǒng)
18.1 File類
18.1.1目錄列表器
18.1.2 目錄實用工具
18.1.3 目錄的檢查及創(chuàng)建
18.2 輸入和輸出
18.2.1 InputStream類型
18.2.2 OutputStream類型
18.3 添加屬性和有用的接口
18.3.1 通過FilterInputStream從InputStream讀取
18.3.2 通過FilterOutPutStream向OutputStream寫入
18.4 Reader和Writer
18.4.1 數(shù)據(jù)的來源和去處
18.4.2 更改流的行為
18.4.3 未發(fā)生變化的類
18.5 自我獨立的類:RandomAccessFile
18.6 I/O流的典型使用方式
18.6.1 緩沖的輸入文件
18.6.2 從內(nèi)存中輸入
18.6.3 格式化的內(nèi)存輸入
18.6.4 基本文件輸出
18.6.5 存儲和恢復(fù)數(shù)據(jù)
18.6.6 讀取和寫入隨機訪問文件
18.6.7 管道流
18.7 文件讀寫的實用工具
18.7.1 讀取二進制文件
18.8 標準I/O
18.8.1 從標準輸入中讀取
18.8.2 將System.out轉(zhuǎn)換成PrintWriter
18.8.3 標準I/O重定向
18.9 進程控制
18.10 新I/O
18.10.1 轉(zhuǎn)換數(shù)據(jù)
18.10.2 獲取基本類型
18.10.3 視圖緩沖器
18.10.4 用緩沖器操縱數(shù)據(jù)
18.10.5 緩沖器的細節(jié)
18.10.6 內(nèi)存映射文件
18.10.7 文件加鎖
18.11 壓縮
18.11.1 用GZIP進行簡單壓縮
18.11.2 用Zip進行多文件存儲
18.11.3 Java檔案文件
18.12 對象序列化
18.12.1 尋找類
18.12.2 序列化的控制
18.12.3 使用“持久性”
18.13 XML
18.14 Preferences
18.15 總結(jié)
第19章 枚舉類型
19.1 基本enum特性
19.1.1 將靜態(tài)導(dǎo)入用于enum
19.2 向enum中添加新方法
19.2.1 覆蓋enum的方法
19.3 switch語句中的enum
19.4 values()的神秘之處
19.5 實現(xiàn)但不繼承隨機選取
19.6 為組織而使用接口
19.7 使用EnumSet替代標志
19.8 使用EnumMap
19.9 常數(shù)相關(guān)的方法
19.9.1 使用enum的職責(zé)鏈
19.9.2 使用enum的狀態(tài)機
19.10 多路分發(fā)
19.10.1 使用enum分發(fā)
19.10.2 使用常數(shù)相關(guān)的方法
19.10.3 使用EnumMap分發(fā)
19.10.4 使用二維數(shù)組
19.11 總結(jié)
第20章 注解
20.1 基本語法
20.1.1 定義注解
20.1.2 元注解
20.2 編寫注解處理器
20.2.1 注解元素
20.2.2 缺省值限制
20.2.3 生成外部文件
20.2.4 注解不支持繼承
20.2.5 實現(xiàn)處理器
20.3 使用apt處理注解
20.4 將觀察者模式用于apt
20.5 基于注解的單元測試
20.5.1 將@Unit用于泛型
20.5.2 不需要任何“套件”
20.5.3 實現(xiàn)@Unit
20.5.4 移除測試代碼
20.6 總結(jié)
第21章 并發(fā)
21.1 并發(fā)的多面性
21.1.1 更快的執(zhí)行
21.1.2 改進代碼設(shè)計
21.2 基本的線程機制
21.2.1 定義任務(wù)讓步
21.2.2 Thread類
21.2.3 使用Executor
21.2.4 從任務(wù)產(chǎn)生返回值
21.2.5 休眠
21.2.6 優(yōu)先級
21.2.7 讓步
21.2.8 后臺線程
21.2.9 編碼的變體
21.2.10 術(shù)語
21.2.11 加入一個線程
21.2.12 創(chuàng)建有響應(yīng)的用戶界面
21.2.13 線程組
21.2.14 捕獲異常
21.3 共享受限資源
21.3.1 不正確地訪問資源
21.3.2 解決共享資源競爭
21.3.3 原子性與易變性
21.3.4 原子類
21.3.5 臨界資源
21.3.6 在其他對象上同步
21.3.7 線程局部存儲
21.4 終結(jié)任務(wù)
21.4.1 裝飾性花園
21.4.2 在阻塞時終結(jié)
21.4.3 中斷
21.4.4 檢查中斷
21.5 線程之間的協(xié)作
21.5.1 wait()與notifyAll()
21.5.2 notify()與notifyAll()
21.5.3 生產(chǎn)者與消費者
21.5.4 生產(chǎn)者-消費者與隊列
21.5.5 任務(wù)間使用管道進行輸入/輸出
21.6 死鎖
21.7 新類庫中的構(gòu)件
21.7.1 CountDownLatch
21.7.2 CyclicBarrier
21.7.3 DelayQueue
21.7.4 PriorityBlockingQueue
21.7.5 使用ScheduledExecutor的溫室控制器
21.7.6 Semaphore
21.7.7 Exchange
21.8 仿真
21.8.1 銀行出納仿真
21.8.2 飯店仿真
21.8.3 分發(fā)工作
21.9 性能調(diào)優(yōu)
21.9.1 比較各類互斥技術(shù)
21.9.2 免鎖容器
21.9.3 樂觀鎖
21.9.4 ReadWriteLock
21.10 活動對象
21.11 總結(jié)
21.12 進階讀物
第22章 圖形化用戶界面
22.1 applet
22.2 Swing基礎(chǔ)
22.2.1 一個顯示框架
22.3 創(chuàng)建按鈕
22.4 捕獲事件
22.5 文本區(qū)域
22.6 控制布局
22.6.1 BorderLayout
22.6.2 FlowLayout
22.6.3 GridLayout
22.6.4 GridBagLayout
22.6.5 絕對定位
22.6.6 BoxLayout
22.6.7 最好的方式是什么
22.7 Swing事件模型
22.7.1 事件與監(jiān)聽器的類型
22.7.2 跟蹤多個事件
22.8 Swing組件一覽
22.8.1 按鈕
22.8.2 圖標
22.8.3 工具提示
22.8.4 文本域
22.8.5 邊框
22.8.6 滾動面板
22.8.7 一個迷你編輯器
22.8.8 復(fù)選框
22.8.9 單選按鈕
22.8.10 組合框(下拉列表)
22.8.11 列表框
22.8.12 頁簽面板
22.8.13 消息框
22.8.22 菜單
22.8.15 彈出式菜單
22.8.16 繪圖
22.8.17 對話框
22.8.18 文件對話框
22.8.19 Swing組件上的HTML
22.8.20 滑塊與進度條
22.8.21 選擇外觀
22.8.22 樹、表格和剪貼板
22.9 JNLP與Java Web Start
22.10 Swing與并發(fā)
22.10.1 長期運行的任務(wù)
22.10.2 可視化線程機制
22.11 可視化編程與JavaBean
22.11.1 JavaBean是什么
22.11.2 使用Introspector抽取出BeanInfo
22.11.3 一個更復(fù)雜的Bean
22.11.4 JavaBean與同步
22.11.5 把Bean打包
22.11.6 對更復(fù)雜的Bean的支持
22.11.7 更多有關(guān)Bean的讀物
22.12 Swing的可替換選擇
22.13 用Flex構(gòu)建Flash Web客戶端
22.13.1 Hello, Flex
22.13.2 編譯MXML
22.13.3 MXML與ActionScript
22.13.4 容器與控制
22.13.5 效果與風(fēng)格
22.13.6 事件
22.13.7 連接到Java
22.13.8 數(shù)據(jù)模型與數(shù)據(jù)綁定
22.13.9 構(gòu)建和部署
22.14 創(chuàng)建SWT應(yīng)用
22.14.1 安裝SWT
22.14.2 Hello, SWT
22.14.3 根除冗余代碼
22.14.4 菜單
22.14.5 頁簽面板、按鈕和事件
22.14.6 圖形
22.14.7 SWT中的并發(fā)
22.14.8 SWT還是Swing
22.15 總結(jié)
22.15.1 資源
附錄A 補充材料
可下載的補充材料
Thinking in C:Java的基礎(chǔ)
Java編程思想 研討課
Hands-on Java研討課CD
Thinking in Objects研討課
Thinking in Enterprise Java
Thinking in Patterns(with Java)
Thinking in Patterns研討課
設(shè)計咨詢與復(fù)審
附錄B 資源
軟件
編輯器與IDE
書籍
分析與設(shè)計
Python
我的著作列表
索引
為一本書寫作新版時,作者最滿意的是:把事情做得“恰如其分”。這是我從本書上一個版本發(fā)布以來所學(xué)到的東西。通常而言,這種見識正如諺語所云,“學(xué)習(xí)就是從失敗中汲取教訓(xùn)!辈⑶遥乙步铏C進行了一些修訂。與往常一樣,一個新的版本必將帶來引人入勝的新思想。此時,新發(fā)現(xiàn)帶來的喜悅,采用比以往更好的形式表達思想的能力,已經(jīng)遠遠超過了可能引入的小錯誤。
這也是對不斷在我腦中盤旋低語著的一種挑戰(zhàn),那就是讓持有本書老版本的讀者也愿意購買新的版本。這些促使著我盡可能改進,重寫,以及重新組織內(nèi)容,為熱忱的讀者們獻上一本全新的,值得擁有的書。
改變
此版本中將不再包含以往本書中所攜帶的CD光盤。該CD中的重要部分《Thinking in C》的多媒體教程(由Chuck Allison為MindView創(chuàng)建),現(xiàn)在提供了可下載的Flash版本。該教程是為不熟悉C語法的讀者所準備的。雖然,本書用了兩章對語法做了較為完整的介紹,然而對于沒有相應(yīng)背景知識的讀者而言,這也許仍然不夠。而《Thinking in C》正是為了幫助這些讀者提升到必要的程度。
完全重寫了“并發(fā)”這一章(以前稱為“多線程”),以符合Java SE5并發(fā)類庫的重大改變。它將為讀者了解并發(fā)的核心思想打下基礎(chǔ)。如果沒有這些核心的基礎(chǔ)知識,讀者很難理解關(guān)于線程的更復(fù)雜的議題。我花了很多個月撰寫這一章,深陷“并發(fā)”的地獄之中,最終,這一章不僅涵蓋了基礎(chǔ)知識,而且大膽地引入了一些高級議題。
而對于Java SE5所具有的每一個重大的新特性,本書都有一個新的章節(jié)與之對應(yīng)。其他的新特性則加入到了原有的章節(jié)中。我還一直在研究設(shè)計模式,因此在本書中,也介紹了設(shè)計模式的相關(guān)內(nèi)容。
本書經(jīng)歷了重大的重組。這大多源自教授Java的過程,以及我對于“章節(jié)”的意義的重新思考。以前,我會不假思索地認為,每個“章節(jié)”應(yīng)該包含一個“足夠大的”主題。但是,在我教授設(shè)計模式的時候,我發(fā)現(xiàn),如果每次只介紹一個模式(即使講課的時間很短),然后立刻組織大家做練習(xí),此時那些學(xué)員們的表現(xiàn)是最好的(我發(fā)現(xiàn),這種節(jié)奏對于我這個老師而言也更有樂趣)。因此,在這一版中,我試著打破按主題劃分章節(jié)的做法,也不理會章節(jié)的長度。我想,這也是一個改進。
我同樣也認識到代碼測試的重要性。必須要有一個內(nèi)建的測試框架,并且每次你開發(fā)系統(tǒng)時都必須進行測試。否則,根本沒有辦法知道代碼可靠與否。為了做到這一點,我開發(fā)了一個測試框架以顯示和驗證本書中每一個程序的輸出結(jié)果。(該框架是用Python編寫的,你可以在www.MindView.net找到可下載的代碼。)關(guān)于測試的話題在附錄中有討論,你可以在http://MindView.net/Books/BetterJava找到。其中還包含了其他一些基本技術(shù),我認為所有程序員都應(yīng)該將它們加入到自己的工具箱中。
此外,我還仔細檢查了書中的每一個示例,并且問我自己,“我為什么采用這種方式實現(xiàn)?”對大多數(shù)的示例,我都做了一定程度的修訂與改進,使得這些示例更加貼切。同時,也傳達出我所認為的Java編程中的最佳實踐(至少起到拋磚引玉的作用)。許多以前的示例都經(jīng)過了重新設(shè)計與重新編寫;同時,刪除了不再有意義的示例,也添加了新的示例。
讀者們?yōu)榇藭那叭齻版本提出了許多許多精彩的意見。這自然使我覺得非常高興。不過,偶爾讀者也會有抱怨,例如有讀者埋怨“本書太長了”。對我而言,如果“頁數(shù)太多”是你唯一的苦惱,那這真令人哭笑不得。(據(jù)說奧地利皇帝曾抱怨莫扎特的音樂“音符太多”!我可不是想把自己比作莫扎特。)此外,我只能猜測,發(fā)出這種抱怨的讀者還不了解Java語言的博大精深,而且也沒有看過這一領(lǐng)域的其他書籍。無論如何,在這一版中,我已經(jīng)刪減了過時無用,或不再重要內(nèi)容。總的來說,我已經(jīng)盡我所能仔細復(fù)查了全書,進行了必要的增刪與改進。對于刪除舊的章節(jié),我還是挺放心的。因為原始的材料在網(wǎng)站上都有)。本書從第一版到第三版,以及本書的附錄,都可以從此網(wǎng)站上下載。
對于仍然不能接受本書篇幅的讀者,我向你們道歉。請相信,我已經(jīng)盡我所能精簡本書的長度了。
你還可能感興趣
我要評論
|