《計(jì)算機(jī)科學(xué)叢書:Java編程思想(第4版)》贏得了全球程序員的廣泛贊譽(yù),即使是最晦澀的概念,在BruceEckel的文字親和力和小而直接的編程示例面前也會(huì)化解于無形。從Java的基礎(chǔ)語法到高級(jí)特性(深入的面向?qū)ο蟾拍睢⒍嗑程、自動(dòng)項(xiàng)目構(gòu)建、單元測(cè)試和調(diào)試等),本書都能逐步指導(dǎo)你輕松掌握。
從《計(jì)算機(jī)科學(xué)叢書:Java編程思想(第4版)》獲得的各項(xiàng)大獎(jiǎng)以及來自世界各地的讀者評(píng)論中,不難看出這是一本經(jīng)典之作。本書的作者擁有多年教學(xué)經(jīng)驗(yàn),對(duì)C、C++以及Java語言都有獨(dú)到、深入的見解,以通俗易懂及小而直接的示例解釋了一個(gè)個(gè)晦澀抽象的概念。本書共22章,包括操作符、控制執(zhí)行流程、訪問權(quán)限控制、復(fù)用類、多態(tài)、接口、通過異常處理錯(cuò)誤、字符串、泛型、數(shù)組、容器深入研究、JavaI/O系統(tǒng)、枚舉類型、并發(fā)以及圖形化用戶界面等內(nèi)容。這些豐富的內(nèi)容,包含了Java語言基礎(chǔ)語法以及高級(jí)特性,適合各個(gè)層次的Java程序員閱讀,同時(shí)也是高等院校講授面向?qū)ο蟪绦蛟O(shè)計(jì)語言以及Java語言的好教材和參考書。
《計(jì)算機(jī)科學(xué)叢書:Java編程思想(第4版)》特點(diǎn):
適合初學(xué)者與專業(yè)人員的經(jīng)典的面向?qū)ο髷⑹龇绞,為更新的JavaSE5/6增加了新的示例和章節(jié)。
測(cè)驗(yàn)框架顯示程序輸出。
設(shè)計(jì)模式貫穿于眾多示例中:適配器、橋接器、職責(zé)鏈、命令、裝飾器、外觀、工廠方法、享元、點(diǎn)名、數(shù)據(jù)傳輸對(duì)象、空對(duì)象、代理、單例、狀態(tài)、策略、模板方法以及訪問者。
為數(shù)據(jù)傳輸引入了XML,為用戶界面引入了SWT和Flash。
重新撰寫了有關(guān)并發(fā)的章節(jié),有助于讀者掌握線程的相關(guān)知識(shí)。
專門為第4版以及JavaSE5/6重寫了700多個(gè)編譯文件中的500多個(gè)程序。
支持網(wǎng)站包含了所有源代碼、帶注解的解決方案指南、網(wǎng)絡(luò)日志以及多媒體學(xué)習(xí)資料。
覆蓋了所有基礎(chǔ)知識(shí),同時(shí)論述了高級(jí)特性。
詳細(xì)地闡述了面向?qū)ο笤怼?br />
在線可獲得Java講座CD,其中包含BruceEckel的全部多媒體講座。
在網(wǎng)站上可以觀看現(xiàn)場(chǎng)講座、咨詢和評(píng)論。
專門為第4版以及JavaSE5/6重寫了700多個(gè)編譯文件中的500多個(gè)程序。
支持網(wǎng)站包含了所有源代碼、帶注解的解決方案指南、網(wǎng)絡(luò)日志以及多媒體學(xué)習(xí)資料。
覆蓋了所有基礎(chǔ)知識(shí),同時(shí)論述了高級(jí)特性。
詳細(xì)地闡述了面向?qū)ο笤怼?br />
時(shí)隔兩年多,《Java編程思想(第4版)》的中文版又要和廣大Java程序員和愛好者們見面了。這是Java語言本身不斷發(fā)展和完善的必然要求,也是本書作者BruceEckel孜孜不倦的創(chuàng)作激情和靈感所結(jié)出的碩果。
《Java編程思想(第4版)》以Java最新的版本JDK5.0為基礎(chǔ),在第3版的基礎(chǔ)上,添加了最新的語言特性,并且對(duì)第3版的結(jié)構(gòu)進(jìn)行了調(diào)整,使得所有章節(jié)的安排更加遵照循序漸進(jìn)的特點(diǎn),同時(shí)每一章的內(nèi)容在分量上也都更加均衡,這使讀者能夠更加容易地閱讀本書并充分了解每章所講述的內(nèi)容。在這里我們?cè)俅蜗駼ruceEckel致敬,他不但向我們展示了什么樣的書籍才是經(jīng)典書籍,而且還展示了經(jīng)典書籍怎樣才能精益求精,長(zhǎng)盛不衰。
Java已經(jīng)成為了編程語言的驕子。我們可以看到,越來越多的大學(xué)在教授數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)和算法分析等課程時(shí),選擇以Java語言為載體。這說明Java語言已經(jīng)是人們構(gòu)建軟件系統(tǒng)時(shí)主要使用的一種編程語言。但是,掌握好Java語言并不是一件可以輕松完成的任務(wù),如何真正掌握J(rèn)ava語言,從而編寫出健壯的、高效的以及靈活的程序是Java程序員們面臨的重大挑戰(zhàn)。
《Java編程思想(第4版)》就是一本能夠讓Java程序員輕松面對(duì)這一挑戰(zhàn),并最終取得勝利的經(jīng)典書籍。本書深入淺出、循序漸進(jìn)地把我們領(lǐng)入Java的世界,讓我們?cè)诓恢挥X中就學(xué)會(huì)了用Java的思想去考慮問題、解決問題。本書不僅適合Java的初學(xué)者,更適合于有經(jīng)驗(yàn)的Java程序員,這正是本書的魅力所在。但是,書中并沒有涵蓋Java所有的類、接口和方法,因此,如果你希望將它當(dāng)作Java的字典來使用,那么顯然就要失望了。
我們?cè)诜g本書的過程中力求忠于原著,為了保持連貫性,對(duì)原書第3版中仍然保持不變的部分,我們對(duì)譯文除了個(gè)別地方之外,也沒做修改。對(duì)于本書中出現(xiàn)的大量的專業(yè)術(shù)語盡量遵循標(biāo)準(zhǔn)的譯法,并在有可能引起歧義之處注有英文原文,以方便讀者對(duì)照與理解。
全書由陳昊鵬翻譯,郭嘉也參與了部分翻譯工作。由于水平有限,書中出現(xiàn)錯(cuò)誤與不妥之處在所難免,懇請(qǐng)讀者批評(píng)指正。
Bruce Eckel,是MindView公司的總裁,該公司向客戶提供軟件咨詢和培訓(xùn)。他是C++標(biāo)準(zhǔn)委員會(huì)擁有表決權(quán)的成員之一,擁有應(yīng)用物理學(xué)學(xué)士和計(jì)算機(jī)工程碩士學(xué)位。除本書外,他還是《C++編程思想》的作者,并與人合著了《C++編程思想第2卷》。
讀者評(píng)論
前言
簡(jiǎn)介
第1章 對(duì)象導(dǎo)論
1.1 抽象過程
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 名字可見性
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 語法
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)單的打印語句
3.2 使用Java操作符
3.3 優(yōu)先級(jí)
3.4 賦值
3.4.1 方法調(diào)用中的別名問題
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沒有“sizeof”
3.17 操作符小結(jié)
3.18 總結(jié)
......
第4章 控制執(zhí)行流程
第5章 初始化與清理
第6章 訪問權(quán)限控制
第7章 復(fù)用類
第8章 多態(tài)
第9章 接口
第10章 內(nèi)部類
第11章 持有對(duì)象
第12章 通過異常處理錯(cuò)誤
第13章 字符串
第14章 類型信息
第15章 泛型
第16章 數(shù)組
第17章 容器深入研究
第18章 Java I/O系統(tǒng)
第19章 枚舉類型
第20章 注解
第21章 并發(fā)
第22章 圖形化用戶界面
附錄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
我的著作列表
索引
1.10 對(duì)象的創(chuàng)建和生命期
在使用對(duì)象時(shí),最關(guān)鍵的問題之一便是它們的生成和銷毀方式。每個(gè)對(duì)象為了生存都需要資源,尤其是內(nèi)存。當(dāng)我們不再需要一個(gè)對(duì)象時(shí),它必須被清理掉,使其占有的資源可以被釋放和重用。在相對(duì)簡(jiǎn)單的編程情況下,怎樣清理對(duì)象看起來似乎不是什么挑戰(zhàn):你創(chuàng)建了對(duì)象,根據(jù)需要使用它,然后它應(yīng)該被銷毀。然而,你很可能會(huì)遇到相對(duì)復(fù)雜的情況。
例如,假設(shè)你正在為某個(gè)機(jī)場(chǎng)設(shè)計(jì)空中交通管理系統(tǒng)(同樣的模型在倉(cāng)庫貨柜管理系統(tǒng)、錄像帶出租系統(tǒng)或?qū)櫸锛乃薜暌策m用)。一開始問題似乎很簡(jiǎn)單:創(chuàng)建一個(gè)容器來保存所有的飛機(jī),然后為每一架進(jìn)入空中交通控制區(qū)域的飛機(jī)創(chuàng)建一個(gè)新的飛機(jī)對(duì)象,并將其置于容器中。對(duì)于清理工作,只需在飛機(jī)離開此區(qū)域時(shí)刪除相關(guān)的飛機(jī)對(duì)象即可。
但是,可能還有別的系統(tǒng)記錄著有關(guān)飛機(jī)的數(shù)據(jù),也許這些數(shù)據(jù)不需要像主要控制功能那樣立即引人注意。例如,它可能記錄著所有飛離機(jī)場(chǎng)的小型飛機(jī)的飛行計(jì)劃。因此你需要有第二個(gè)容器來存放小型飛機(jī),無論何時(shí),只要?jiǎng)?chuàng)建的是小型飛機(jī)對(duì)象,那么它同時(shí)也應(yīng)該置入第二個(gè)容器內(nèi)。然后某個(gè)后臺(tái)進(jìn)程在空閑時(shí)對(duì)第二個(gè)容器內(nèi)的對(duì)象進(jìn)行操作。
現(xiàn)在問題變得更困難了:怎樣才能知道何時(shí)銷毀這些對(duì)象呢?當(dāng)處理完某個(gè)對(duì)象之后,系統(tǒng)某個(gè)其他部分可能還在處理它。在其他許多場(chǎng)合中也會(huì)遇到同樣的問題,在必須明確刪除對(duì)象的編程系統(tǒng)中(例如C++),此問題會(huì)變得十分復(fù)雜。
對(duì)象的數(shù)據(jù)位于何處?怎樣控制對(duì)象的生命周期?C++認(rèn)為效率控制是最重要的議題,所以給程序員提供了選擇的權(quán)力。為了追求最大的執(zhí)行速度,對(duì)象的存儲(chǔ)空間和生命周期可以在編寫程序時(shí)確定,這可以通過將對(duì)象置于堆棧(它們有時(shí)被稱為自動(dòng)變量(automaticvariable)或限域變量(scopedvariable))或靜態(tài)存儲(chǔ)區(qū)域內(nèi)來實(shí)現(xiàn)。這種方式將存儲(chǔ)空間分配和釋放置于優(yōu)先考慮的位置,某些情況下這樣控制非常有價(jià)值。但是,也犧牲了靈活性,因?yàn)楸仨氃诰帉懗绦驎r(shí)知道對(duì)象確切的數(shù)量、生命周期和類型。如果試圖解決更一般化的問題,例如計(jì)算機(jī)輔助設(shè)計(jì)、倉(cāng)庫管理或者空中交通控制,這種方式就顯得過于受限了。
第二種方式是在被稱為堆(heap)的內(nèi)存池中動(dòng)態(tài)地創(chuàng)建對(duì)象。在這種方式中,直到運(yùn)行時(shí)才知道需要多少對(duì)象,它們的生命周期如何,以及它們的具體類型是什么。這些問題的答案只能在程序運(yùn)行時(shí)相關(guān)代碼被執(zhí)行到的那一刻才能確定。如果需要一個(gè)新對(duì)象,可以在需要的時(shí)刻直接在堆中創(chuàng)建。因?yàn)榇鎯?chǔ)空間是在運(yùn)行時(shí)被動(dòng)態(tài)管理的,所以需要大量的時(shí)間在堆中分配存儲(chǔ)空間,這可能要遠(yuǎn)遠(yuǎn)大于在堆棧中創(chuàng)建存儲(chǔ)空間的時(shí)間。在堆棧中創(chuàng)建存儲(chǔ)空間和釋放存儲(chǔ)空間通常各需要一條匯編指令即可,分別對(duì)應(yīng)將棧頂指針向下移動(dòng)和將棧頂指針向上移動(dòng)。創(chuàng)建堆存儲(chǔ)空間的時(shí)間依賴于存儲(chǔ)機(jī)制的設(shè)計(jì)。
動(dòng)態(tài)方式有這樣一個(gè)一般性的邏輯假設(shè):對(duì)象趨向于變得復(fù)雜,所以查找和釋放存儲(chǔ)空間的開銷不會(huì)對(duì)對(duì)象的創(chuàng)建造成重大沖擊。動(dòng)態(tài)方式所帶來的更大的靈活性正是解決一般化編程問題的要點(diǎn)所在。
Java完全采用了動(dòng)態(tài)內(nèi)存分配方式e。每當(dāng)想要?jiǎng)?chuàng)建新對(duì)象時(shí),就要使用new關(guān)鍵字來構(gòu)建此對(duì)象的動(dòng)態(tài)實(shí)例。
……