關(guān)于我們
書單推薦
新書推薦
|
Java編程思想(英文版.第4版)
本書特色:
·適合初學(xué)者與專業(yè)人員的經(jīng)典的面向?qū)ο蟮臄⑹龇绞;為更新的Java SE5/6的相關(guān)內(nèi)容增加了新的示例和章節(jié)。
·測(cè)驗(yàn)框架顯示程序輸出。
·設(shè)計(jì)模式貫穿于眾多示例中:適配器、橋接器、職責(zé)鏈、命令、裝飾器、外觀、工廠方法、享元、點(diǎn)名、數(shù)據(jù)傳輸對(duì)象、空對(duì)象、代理、單例、狀態(tài)、策略、模板方法以及訪問(wèn)者。
·為數(shù)據(jù)傳輸引入了XML;為用戶界面引入了SWT和Flash。
·重新撰寫了有關(guān)并發(fā)的章節(jié),使您能牢牢地掌握線程的相關(guān)知識(shí)。
·專門為第4版以及Java SE5/6重寫了在700多個(gè)編譯文件中的500多個(gè)程序。
·支持網(wǎng)站包含了所有源代碼、帶注解的解決方案指南、網(wǎng)絡(luò)日志以及多媒體學(xué)習(xí)資料。
·完全覆蓋了所有基礎(chǔ)知識(shí),同時(shí)也論述了高級(jí)特性。
·詳細(xì)徹底地闡述了面向?qū)ο笤怼?
·在線可獲得Java講座CD,包含Bruce Eckel的全部多媒體講座。
本書曾榮獲:
2003年《Software Development》雜志Jolt大獎(jiǎng)
2002年《Java Developer’s Journal》讀者選擇圖書獎(jiǎng)
2001年《Java World》雜志編輯推薦圖書獎(jiǎng)
2000年《Java World》讀者選擇圖書獎(jiǎng)
1999年《Software Development》雜志產(chǎn)品獎(jiǎng)
1998年《Java Developer’s Journal》編輯推薦圖書獎(jiǎng)
本書贏得了全球程序員的廣泛贊譽(yù),即使是晦澀的概念,在Bruce Eckel的文字親和力和小而直接的編程示例面前也會(huì)化解于無(wú)形。從Java的基礎(chǔ)語(yǔ)法到極高級(jí)特性,本書都能逐步指導(dǎo)你輕松掌握。
Bruce Eckel是Mind View公司的總裁,該公司向客戶提供軟件咨詢和培訓(xùn)。他是C++標(biāo)準(zhǔn)委員會(huì)擁有表決權(quán)的成員之一,擁有應(yīng)用物理學(xué)學(xué)士和計(jì)算機(jī)工程碩士學(xué)位。除本書外,他還是《C++編程思想》(該書景印版及翻譯版已由機(jī)械工業(yè)出版社引進(jìn)出版)的作者,并與人合著了《C++編程思想 第2卷》及其他著作。他已經(jīng)發(fā)表了150多篇論文,還經(jīng)常參加世界各地的研討會(huì)并進(jìn)行演講。
讀者評(píng)論
前言
簡(jiǎn)介
第1章 對(duì)象導(dǎo)論
1.1 抽象過(guò)程
1.2 每個(gè)對(duì)象都有一個(gè)接口
1.3 每個(gè)對(duì)象都提供服務(wù)
1.4 被隱藏的具體實(shí)現(xiàn)
1.5 復(fù)用具體實(shí)現(xiàn)
1.6 繼承
1.6.1 “是一個(gè)”(is-a)與“像是一個(gè)”(is-like-a)關(guān)系
1.7 伴隨多態(tài)的可互換對(duì)象
1.8 單根繼承結(jié)構(gòu)
1.9 容器
1.9.1 參數(shù)化類型(范型)
1.10 對(duì)象的創(chuàng)建和生命期
1.11 異常處理:處理錯(cuò)誤
1.12 并發(fā)編程
1.13 Java與Internet
1.13.1 Web是什么
1.13.2 客戶端編程
1.13.3 服務(wù)器端編程
1.22 總結(jié)
第2章 一切都是對(duì)象
2.1 用引用操縱對(duì)象
2.2 必須由你創(chuàng)建所有對(duì)象
2.2.1 存儲(chǔ)到什么地方
2.2.2 特例:基本類型
2.2.3 Java中的數(shù)組
2.3 永遠(yuǎn)不需要銷毀對(duì)象
2.3.1 作用域
2.3.2 對(duì)象的作用域
2.4 創(chuàng)建新的數(shù)據(jù)類型:類
2.4.1 域和方法
2.4.2 基本成員默認(rèn)值
2.5 方法、參數(shù)和返回值
2.5.1 參數(shù)列表
2.6 構(gòu)建一個(gè)Java程序
2.6.1 名字可見(jiàn)性
2.6.2 運(yùn)用其他構(gòu)件
2.6.3 static 關(guān)鍵字
2.7 你的第一個(gè)Java程序
編譯和運(yùn)行
2.8 注釋和嵌入式文檔
2.8.1 注釋文檔
2.8.2 語(yǔ)法
2.8.3 嵌入式HTML
2.8.4 一些標(biāo)簽示例
2.8.5 文檔示例
2.9 編碼風(fēng)格
2.10 總結(jié)
2.11 練習(xí)
第3章 操作符
3.1 更簡(jiǎn)單的打印語(yǔ)句
3.2 使用Java操作符
3.3 優(yōu)先級(jí)
3.4 賦值
3.4.1 方法調(diào)用中的別名問(wèn)題
3.5 算術(shù)操作符
3.5.1 一元加、減操作符
3.6 自動(dòng)遞增和遞減
3.7 關(guān)系操作符
3.7.1 測(cè)試對(duì)象的等價(jià)性
3.8 邏輯操作符
3.8.1 短路
3.9 直接常量
3.9.1 指數(shù)記數(shù)法
3.10 按位操作符
3.11 移位操作符
3.12 三元操作符 if-else
3.13 字符串操作符 + 和 +=
3.14 使用操作符時(shí)常犯的錯(cuò)誤
3.15 類型轉(zhuǎn)換操作符
3.15.1 截尾和舍入
3.15.2提升
3.16 Java沒(méi)有“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 逗號(hào)操作符
4.4 Foreach語(yǔ)法
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 你必須實(shí)施清理
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)實(shí)例初始化
5.8 數(shù)組初始化
5.8.1 可變參數(shù)列表
5.9 枚舉類型
5.10 總結(jié)
第6章 訪問(wèn)權(quán)限控制
6.1 包:庫(kù)單元
6.1.1 代碼組織
6.1.2 創(chuàng)建獨(dú)一無(wú)二的包名
6.1.3 定制工具庫(kù)
6.1.4 用 import改變行為
6.1.5 對(duì)使用包的忠告
6.2 Java訪問(wèn)權(quán)限修飾詞
6.2.1 包訪問(wèn)權(quán)限
6.2.2 public:接口訪問(wèn)權(quán)限
6.2.3 private: 你無(wú)法訪問(wèn)
6.2.4 protected:繼承訪問(wèn)權(quán)限
6.3 接口和實(shí)現(xiàn)
6.4 類的訪問(wèn)權(quán)限
6.5 總結(jié)
第7章 復(fù)用類
7.1 組合語(yǔ)法
7.2 繼承語(yǔ)法
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 忘記對(duì)象類型
8.2 轉(zhuǎn)機(jī)
8.2.1 方法調(diào)用綁定
8.2.2 產(chǎn)生正確的行為
8.2.3 可擴(kuò)展性
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 通過(guò)繼承來(lái)擴(kuò)展接口
9.5.1 組合接口時(shí)的名字沖突
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 從多層嵌套類中訪問(wèn)外部類的成員
10.8 為什么需要內(nèi)部類
10.8.1 閉包與回調(diào)
10.8.2 內(nèi)部類與控制框架
10.9 內(nèi)部類的繼承
10.10 內(nèi)部類可以被覆蓋嗎
10.11 局部?jī)?nèi)部類
10.12 內(nèi)部類標(biāo)識(shí)符
10.13 總結(jié)
第11章 持有對(duì)象
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章 通過(guò)異常處理錯(cuò)誤
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 異常說(shuō)明
12.6 捕獲所有異常
12.6.1 棧軌跡
12.6.2 重新拋出異常
12.6.3 異常鏈
12.7 Java標(biāo)準(zhǔn)異常
12.7.1 特例: RuntimeException(運(yùn)行時(shí)異常)
12.8 使用finally進(jìn)行清理
12.8.1 finally用來(lái)做什么
12.8.2 在return中使用finally
12.8.3 缺憾:異常丟失
12.9 異常的限制
12.10 構(gòu)造器
12.11 異常匹配
12.12 其他可選方式
12.12.1 歷史
12.12.2 觀點(diǎn)
12.12.3 把異常傳遞給控制臺(tái)
12.12.4 把“受檢查異常”轉(zhuǎn)換為“不受檢查的異!
12.13 異常使用指南
12.14 總結(jié)
第13章 字符串
13.1 不可變String
13.2 重載"+"與StringBuilder
13.3 無(wú)意識(shí)的遞歸
13.4 String上的操作
13.5 格式化輸出
13.5.1 printf()
13.5.2 System.out.format()
13.5.3 Formatter類
13.5.4 格式化說(shuō)明符
13.5.5 Formatter轉(zhuǎn)換
13.5.6 String.format()
13.6 正則表達(dá)式
13.6.1 基礎(chǔ)
13.6.2 創(chuàng)建正則表達(dá)式
13.6.3 限定符
13.6.4 Pattern和Matcher
13.6.5 split()
13.6.6 替換操作
13.6.7 reset()
13.6.8 正則表達(dá)式與Java I/O
13.7 掃描輸入
13.7.1 Scanner定界符
13.7.2 用正則表達(dá)式掃描
13.8 StringTokenizer
13.9 總結(jié)
第14章 類型信息
14.1 為什么需要RTTI
14.2 Class對(duì)象
14.2.1 類字面常量
14.2.2 泛化的Class引用
14.2.3 新的轉(zhuǎn)型語(yǔ)法
14.3類型轉(zhuǎn)換前先做檢查
14.3.1 使用類字面常量
14.3.2 動(dòng)態(tài)instanceof
14.3.3 遞歸計(jì)數(shù)
14.4 注冊(cè)工廠
14.5 instanceof 與 Class的等價(jià)性
14.6 反射:運(yùn)行時(shí)類信息
14.6.1 類方法抽取器
14.7 動(dòng)態(tài)代理
14.8 空對(duì)象
14.8.1 模擬對(duì)象與樁
14.9 接口與類型信息
14.10 總結(jié)
第15章 泛型
15.1 與C++的比較
15.2 簡(jiǎn)單泛型
15.2.1 一個(gè)元組類庫(kù)
15.2.2 一個(gè)棧類
15.2.3 RandomList
15.3 泛型接口
15.4 泛型方法
15.4.1 利用類型參數(shù)推斷
15.4.2 可變參數(shù)與泛型方法
15.4.3 用于Generator的泛型方法
15.4.4 一個(gè)通用的Generator
15.4.5 簡(jiǎn)化元組的使用
15.4.6 一個(gè)Set實(shí)用工具
15.5 匿名內(nèi)部類
15.6 構(gòu)建復(fù)雜模型
15.7 擦除的神秘之處
15.7.1 C++的方式
15.7.2 遷移的可兼容性
15.7.3 擦除的問(wèn)題
15.7.4 邊界處的動(dòng)作
15.8 擦除的補(bǔ)償
15.8.1 創(chuàng)建類型實(shí)例
15.8.2 泛型數(shù)組
15.9 邊界
15.10 通配符
15.10.1 編譯器有多聰明?
15.10.2 抗變
15.10.3 無(wú)界通配符
15.10.4 捕獲轉(zhuǎn)換
15.11 問(wèn)題
15.11.1 任何基本類型都不能作為類型參數(shù)
15.11.2 實(shí)現(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 動(dòng)態(tài)類型安全
15.14 異常
15.15 混用
15.15.1 C++中的混用
15.15.2 與接口混用
15.15.3 使用裝飾器模式
15.15.4 與動(dòng)態(tài)代理混用
15.16 潛在類型機(jī)制
15.17 缺乏潛在類型機(jī)制的補(bǔ)償
15.17.1 反射
15.17.2 將一個(gè)方法應(yīng)用于序列
15.17.3 當(dāng)你并未碰巧擁有正確的接口時(shí)
15.17.4 用適配器仿真潛在類型機(jī)制
15.18 將函數(shù)對(duì)象用作策略
15.19 總結(jié):轉(zhuǎn)型真的如此之糟嗎?
15.19.1 進(jìn)階讀物
第16章 數(shù)組
16.1 數(shù)組為什么特殊
16.2 數(shù)組是第一級(jí)對(duì)象
16.3 返回一個(gè)數(shù)組
16.4 多維數(shù)組
11.5 數(shù)組與泛型
16.6 創(chuàng)建測(cè)試數(shù)據(jù)
16.6.1 Arrays.fill()
16.6.2 數(shù)據(jù)生成器(Generator)
16.6.3 從Generator中創(chuàng)建數(shù)組
16.7 Arrays實(shí)用功能
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和存儲(chǔ)順序
17.6.1 SortedSet
17.7 隊(duì)列
17.7.1 優(yōu)先級(jí)隊(duì)列
17.7.2 雙向隊(duì)列
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 選擇接口的不同實(shí)現(xiàn)
17.10.1 性能測(cè)試框架
17.10.2 對(duì)List的選擇
17.10.3 微基準(zhǔn)測(cè)試的危險(xiǎn)
17.10.4 對(duì)Set的選擇
17.10.5 對(duì)Map的選擇
17.11 實(shí)用方法
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 目錄實(shí)用工具
18.1.3 目錄的檢查及創(chuàng)建
18.2 輸入和輸出
18.2.1 InputStream類型
18.2.2 OutputStream類型
18.3 添加屬性和有用的接口
18.3.1 通過(guò)FilterInputStream從InputStream讀取
18.3.2 通過(guò)FilterOutPutStream向OutputStream寫入
18.4 Reader和Writer
18.4.1 數(shù)據(jù)的來(lái)源和去處
18.4.2 更改流的行為
18.4.3 未發(fā)生變化的類
18.5 自我獨(dú)立的類:RandomAccessFile
18.6 I/O流的典型使用方式
18.6.1 緩沖的輸入文件
18.6.2 從內(nèi)存中輸入
18.6.3 格式化的內(nèi)存輸入
18.6.4 基本文件輸出
18.6.5 存儲(chǔ)和恢復(fù)數(shù)據(jù)
18.6.6 讀取和寫入隨機(jī)訪問(wèn)文件
18.6.7 管道流
18.7 文件讀寫的實(shí)用工具
18.7.1 讀取二進(jìn)制文件
18.8 標(biāo)準(zhǔn)I/O
18.8.1 從標(biāo)準(zhǔn)輸入中讀取
18.8.2 將System.out轉(zhuǎn)換成PrintWriter
18.8.3 標(biāo)準(zhǔn)I/O重定向
18.9 進(jìn)程控制
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 緩沖器的細(xì)節(jié)
18.10.6 內(nèi)存映射文件
18.10.7 文件加鎖
18.11 壓縮
18.11.1 用GZIP進(jìn)行簡(jiǎn)單壓縮
18.11.2 用Zip進(jìn)行多文件存儲(chǔ)
18.11.3 Java檔案文件
18.12 對(duì)象序列化
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語(yǔ)句中的enum
19.4 values()的神秘之處
19.5 實(shí)現(xiàn)但不繼承隨機(jī)選取
19.6 為組織而使用接口
19.7 使用EnumSet替代標(biāo)志
19.8 使用EnumMap
19.9 常數(shù)相關(guān)的方法
19.9.1 使用enum的職責(zé)鏈
19.9.2 使用enum的狀態(tài)機(jī)
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 基本語(yǔ)法
20.1.1 定義注解
20.1.2 元注解
20.2 編寫注解處理器
20.2.1 注解元素
20.2.2 缺省值限制
20.2.3 生成外部文件
20.2.4 注解不支持繼承
20.2.5 實(shí)現(xiàn)處理器
20.3 使用apt處理注解
20.4 將觀察者模式用于apt
20.5 基于注解的單元測(cè)試
20.5.1 將@Unit用于泛型
20.5.2 不需要任何“套件”
20.5.3 實(shí)現(xiàn)@Unit
20.5.4 移除測(cè)試代碼
20.6 總結(jié)
第21章 并發(fā)
21.1 并發(fā)的多面性
21.1.1 更快的執(zhí)行
21.1.2 改進(jìn)代碼設(shè)計(jì)
21.2 基本的線程機(jī)制
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)先級(jí)
21.2.7 讓步
21.2.8 后臺(tái)線程
21.2.9 編碼的變體
21.2.10 術(shù)語(yǔ)
21.2.11 加入一個(gè)線程
21.2.12 創(chuàng)建有響應(yīng)的用戶界面
21.2.13 線程組
21.2.14 捕獲異常
21.3 共享受限資源
21.3.1 不正確地訪問(wèn)資源
21.3.2 解決共享資源競(jìng)爭(zhēng)
21.3.3 原子性與易變性
21.3.4 原子類
21.3.5 臨界資源
21.3.6 在其他對(duì)象上同步
21.3.7 線程局部存儲(chǔ)
21.4 終結(jié)任務(wù)
21.4.1 裝飾性花園
21.4.2 在阻塞時(shí)終結(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)者與消費(fèi)者
21.5.4 生產(chǎn)者-消費(fèi)者與隊(duì)列
21.5.5 任務(wù)間使用管道進(jìn)行輸入/輸出
21.6 死鎖
21.7 新類庫(kù)中的構(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 樂(lè)觀鎖
21.9.4 ReadWriteLock
21.10 活動(dòng)對(duì)象
21.11 總結(jié)
21.12 進(jìn)階讀物
第22章 圖形化用戶界面
22.1 applet
22.2 Swing基礎(chǔ)
22.2.1 一個(gè)顯示框架
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 絕對(duì)定位
22.6.6 BoxLayout
22.6.7 最好的方式是什么
22.7 Swing事件模型
22.7.1 事件與監(jiān)聽(tīng)器的類型
22.7.2 跟蹤多個(gè)事件
22.8 Swing組件一覽
22.8.1 按鈕
22.8.2 圖標(biāo)
22.8.3 工具提示
22.8.4 文本域
22.8.5 邊框
22.8.6 滾動(dòng)面板
22.8.7 一個(gè)迷你編輯器
22.8.8 復(fù)選框
22.8.9 單選按鈕
22.8.10 組合框(下拉列表)
22.8.11 列表框
22.8.12 頁(yè)簽面板
22.8.13 消息框
22.8.22 菜單
22.8.15 彈出式菜單
22.8.16 繪圖
22.8.17 對(duì)話框
22.8.18 文件對(duì)話框
22.8.19 Swing組件上的HTML
22.8.20 滑塊與進(jìn)度條
22.8.21 選擇外觀
22.8.22 樹(shù)、表格和剪貼板
22.9 JNLP與Java Web Start
22.10 Swing與并發(fā)
22.10.1 長(zhǎng)期運(yùn)行的任務(wù)
22.10.2 可視化線程機(jī)制
22.11 可視化編程與JavaBean
22.11.1 JavaBean是什么
22.11.2 使用Introspector抽取出BeanInfo
22.11.3 一個(gè)更復(fù)雜的Bean
22.11.4 JavaBean與同步
22.11.5 把Bean打包
22.11.6 對(duì)更復(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 頁(yè)簽面板、按鈕和事件
22.14.6 圖形
22.14.7 SWT中的并發(fā)
22.14.8 SWT還是Swing
22.15 總結(jié)
22.15.1 資源
附錄A 補(bǔ)充材料
可下載的補(bǔ)充材料
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è)計(jì)咨詢與復(fù)審
附錄B 資源
軟件
編輯器與IDE
書籍
分析與設(shè)計(jì)
Python
我的著作列表
索引
為一本書寫作新版時(shí),作者最滿意的是:把事情做得“恰如其分”。這是我從本書上一個(gè)版本發(fā)布以來(lái)所學(xué)到的東西。通常而言,這種見(jiàn)識(shí)正如諺語(yǔ)所云,“學(xué)習(xí)就是從失敗中汲取教訓(xùn)!辈⑶,我也借機(jī)進(jìn)行了一些修訂。與往常一樣,一個(gè)新的版本必將帶來(lái)引人入勝的新思想。此時(shí),新發(fā)現(xiàn)帶來(lái)的喜悅,采用比以往更好的形式表達(dá)思想的能力,已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)了可能引入的小錯(cuò)誤。
這也是對(duì)不斷在我腦中盤旋低語(yǔ)著的一種挑戰(zhàn),那就是讓持有本書老版本的讀者也愿意購(gòu)買新的版本。這些促使著我盡可能改進(jìn),重寫,以及重新組織內(nèi)容,為熱忱的讀者們獻(xiàn)上一本全新的,值得擁有的書。
改變
此版本中將不再包含以往本書中所攜帶的CD光盤。該CD中的重要部分《Thinking in C》的多媒體教程(由Chuck Allison為MindView創(chuàng)建),現(xiàn)在提供了可下載的Flash版本。該教程是為不熟悉C語(yǔ)法的讀者所準(zhǔn)備的。雖然,本書用了兩章對(duì)語(yǔ)法做了較為完整的介紹,然而對(duì)于沒(méi)有相應(yīng)背景知識(shí)的讀者而言,這也許仍然不夠。而《Thinking in C》正是為了幫助這些讀者提升到必要的程度。
完全重寫了“并發(fā)”這一章(以前稱為“多線程”),以符合Java SE5并發(fā)類庫(kù)的重大改變。它將為讀者了解并發(fā)的核心思想打下基礎(chǔ)。如果沒(méi)有這些核心的基礎(chǔ)知識(shí),讀者很難理解關(guān)于線程的更復(fù)雜的議題。我花了很多個(gè)月撰寫這一章,深陷“并發(fā)”的地獄之中,最終,這一章不僅涵蓋了基礎(chǔ)知識(shí),而且大膽地引入了一些高級(jí)議題。
而對(duì)于Java SE5所具有的每一個(gè)重大的新特性,本書都有一個(gè)新的章節(jié)與之對(duì)應(yīng)。其他的新特性則加入到了原有的章節(jié)中。我還一直在研究設(shè)計(jì)模式,因此在本書中,也介紹了設(shè)計(jì)模式的相關(guān)內(nèi)容。
本書經(jīng)歷了重大的重組。這大多源自教授Java的過(guò)程,以及我對(duì)于“章節(jié)”的意義的重新思考。以前,我會(huì)不假思索地認(rèn)為,每個(gè)“章節(jié)”應(yīng)該包含一個(gè)“足夠大的”主題。但是,在我教授設(shè)計(jì)模式的時(shí)候,我發(fā)現(xiàn),如果每次只介紹一個(gè)模式(即使講課的時(shí)間很短),然后立刻組織大家做練習(xí),此時(shí)那些學(xué)員們的表現(xiàn)是最好的(我發(fā)現(xiàn),這種節(jié)奏對(duì)于我這個(gè)老師而言也更有樂(lè)趣)。因此,在這一版中,我試著打破按主題劃分章節(jié)的做法,也不理會(huì)章節(jié)的長(zhǎng)度。我想,這也是一個(gè)改進(jìn)。
我同樣也認(rèn)識(shí)到代碼測(cè)試的重要性。必須要有一個(gè)內(nèi)建的測(cè)試框架,并且每次你開(kāi)發(fā)系統(tǒng)時(shí)都必須進(jìn)行測(cè)試。否則,根本沒(méi)有辦法知道代碼可靠與否。為了做到這一點(diǎn),我開(kāi)發(fā)了一個(gè)測(cè)試框架以顯示和驗(yàn)證本書中每一個(gè)程序的輸出結(jié)果。(該框架是用Python編寫的,你可以在www.MindView.net找到可下載的代碼。)關(guān)于測(cè)試的話題在附錄中有討論,你可以在http://MindView.net/Books/BetterJava找到。其中還包含了其他一些基本技術(shù),我認(rèn)為所有程序員都應(yīng)該將它們加入到自己的工具箱中。
此外,我還仔細(xì)檢查了書中的每一個(gè)示例,并且問(wèn)我自己,“我為什么采用這種方式實(shí)現(xiàn)?”對(duì)大多數(shù)的示例,我都做了一定程度的修訂與改進(jìn),使得這些示例更加貼切。同時(shí),也傳達(dá)出我所認(rèn)為的Java編程中的最佳實(shí)踐(至少起到拋磚引玉的作用)。許多以前的示例都經(jīng)過(guò)了重新設(shè)計(jì)與重新編寫;同時(shí),刪除了不再有意義的示例,也添加了新的示例。
讀者們?yōu)榇藭那叭齻(gè)版本提出了許多許多精彩的意見(jiàn)。這自然使我覺(jué)得非常高興。不過(guò),偶爾讀者也會(huì)有抱怨,例如有讀者埋怨“本書太長(zhǎng)了”。對(duì)我而言,如果“頁(yè)數(shù)太多”是你唯一的苦惱,那這真令人哭笑不得。(據(jù)說(shuō)奧地利皇帝曾抱怨莫扎特的音樂(lè)“音符太多”!我可不是想把自己比作莫扎特。)此外,我只能猜測(cè),發(fā)出這種抱怨的讀者還不了解Java語(yǔ)言的博大精深,而且也沒(méi)有看過(guò)這一領(lǐng)域的其他書籍。無(wú)論如何,在這一版中,我已經(jīng)刪減了過(guò)時(shí)無(wú)用,或不再重要內(nèi)容。總的來(lái)說(shuō),我已經(jīng)盡我所能仔細(xì)復(fù)查了全書,進(jìn)行了必要的增刪與改進(jìn)。對(duì)于刪除舊的章節(jié),我還是挺放心的。因?yàn)樵嫉牟牧显诰W(wǎng)站上都有)。本書從第一版到第三版,以及本書的附錄,都可以從此網(wǎng)站上下載。
對(duì)于仍然不能接受本書篇幅的讀者,我向你們道歉。請(qǐng)相信,我已經(jīng)盡我所能精簡(jiǎn)本書的長(zhǎng)度了。
你還可能感興趣
我要評(píng)論
|