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