




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java編程思想讀書筆記這是一份試圖提綱挈領(lǐng)的讀書筆記,java編程思想這本八百多頁(yè)的書娓娓道來(lái)地包含了太多細(xì)節(jié),這對(duì)讀者是 非常貼心的,我也強(qiáng)烈建議細(xì)細(xì)讀這本書,如果你希望在短 時(shí)間內(nèi)學(xué)會(huì)java這種語(yǔ)言,那么這本書不是最好的選擇, 你可以看看譚浩強(qiáng)系列。我把看這本書的過(guò)程中,個(gè)人覺得 每一章中最重要的思想、用整理在這里,希望自己回顧的時(shí) 候有所參照和提高。也希望大家?guī)е瑯拥哪康膩?lái)看本篇讀 書筆記。第一章對(duì)象導(dǎo)論比起過(guò)程型語(yǔ)言編寫的程序,用面向?qū)ο笳Z(yǔ)言編寫的程 序更加簡(jiǎn)單、易于理解、可復(fù)用。C+編程思想里也有這一章,是一個(gè)拋磚引自己的玉的章節(jié),不明白可以跳過(guò), 回頭再看。第二章一切都是對(duì)象
2、java語(yǔ)言里面,一切都是對(duì)象,并且程序員是通過(guò)引用 來(lái)操縱對(duì)象。一個(gè)簡(jiǎn)單的例子,非常輕松地讓讀者進(jìn)入java 的世界。需要注意的是java數(shù)據(jù)會(huì)儲(chǔ)存在5個(gè)不同的地方: 寄存器、堆棧、堆、常量存儲(chǔ)、非ram存儲(chǔ),用new創(chuàng)建的一般對(duì)象都放在堆中,而特殊的基本對(duì)象放在堆棧中,如果 想把基本對(duì)象也放在堆中,需要包裝基本類型。第三章操作符java中的操作符語(yǔ)法類似于 c,所以學(xué)習(xí)起來(lái)一點(diǎn)困難 也沒(méi)有。要特別注意兩個(gè)比較大的整數(shù)相加或者相乘的時(shí)候 的溢出問(wèn)題,用long或者biginteger 解決這個(gè)問(wèn)題。第四章控制執(zhí)行流程我想起pointer on c 這本書第一章就有這一句話, 本書適合那些希望
3、迅速學(xué)習(xí)一門新語(yǔ)言而不是被“為什么if和for很重要”的弱智問(wèn)題耽擱進(jìn)度的讀者。呵呵,這一章 很不厭其煩地介紹了運(yùn)算、操作符優(yōu)先級(jí)、類型轉(zhuǎn)換、選擇 循環(huán)等基本特性,有 c或者C+編程經(jīng)驗(yàn)的讀者可以大概瀏 覽一下。第五章初始化和清理關(guān)于初始化:1. 初始化很重要,一定不要忘記。而且java編譯器會(huì)很好的防止使用未初始化數(shù)據(jù)的意外,這是比 c和C+更優(yōu) 的地方。2. 編譯器初始化的順序?yàn)椋篴.類首次加載的時(shí)候,有關(guān)靜態(tài)初始化的所有動(dòng)作都會(huì) 執(zhí)行。a1.類的加載包括首次創(chuàng)建該類型的對(duì)象,或者該類的靜態(tài)方法/靜態(tài)域首次被訪問(wèn)a2.靜態(tài)域的初始化在一切初始化之前,即靜態(tài)變量散布在代碼不同的地方,它們也會(huì)
4、在任何方法(包括構(gòu)造器)調(diào)用之前被初始化b. 當(dāng)用new calssname創(chuàng)建對(duì)象的時(shí)候,會(huì)在堆上開辟 足夠的存儲(chǔ)空間,這塊存儲(chǔ)空間被清零,然后執(zhí)行字段的初 始化動(dòng)作。(這里的字段初始化都是非靜態(tài)的,因?yàn)殪o態(tài)的 變量已經(jīng)在a中執(zhí)行完畢,而且靜態(tài)變量存儲(chǔ)在不同的地方, 靜態(tài)數(shù)據(jù)只占用一份存儲(chǔ)空間)c. 執(zhí)行構(gòu)造器關(guān)于清理C+關(guān)于清理的部分包含很大不確定性。目前需要知道 的事情是,正常情況下,我們是不需要調(diào)用finalize 方法的,而且垃圾回收區(qū)會(huì)自動(dòng)回收不再使用的對(duì)象,同時(shí)我們 需要自己注意一些需要關(guān)閉的文件。需要注意的是,用=對(duì)數(shù)組進(jìn)行“賦值”的時(shí)候,實(shí)際 上是引用的傳遞,就是說(shuō),二者指向
5、同一堆。第六章訪問(wèn)權(quán)限控制關(guān)于包你應(yīng)該有一個(gè)自己的域名,這樣發(fā)布你的 java程序的 時(shí)候,就可以將你的包名設(shè)置為你的域名倒轉(zhuǎn)。想要正確讓 包工作,要正確設(shè)置classpath,對(duì)于新手來(lái)說(shuō),這的確是一個(gè)挑戰(zhàn)。我當(dāng)初就難到了。關(guān)于訪問(wèn)權(quán)限修飾詞值得注意的是,如果兩個(gè)編譯單兀放在同一個(gè)目錄下并 且都沒(méi)有設(shè)置包名的話,他們對(duì)于對(duì)方都是擁有包訪問(wèn)權(quán)限 的。訪問(wèn)權(quán)限修飾詞是修飾方法和數(shù)據(jù),而不是類。類只有 兩種訪問(wèn)權(quán)限,包訪問(wèn)權(quán)限或public 訪問(wèn)權(quán)限。默認(rèn)為包訪問(wèn)權(quán)限。如果不希望其它任何人對(duì)該類擁有訪問(wèn)權(quán)限,可 以把所有的構(gòu)造器設(shè)置為private 。但是有一個(gè)例外,可以通過(guò)該類自己的 stati
6、c 成員內(nèi)部創(chuàng)建(于是就有了工廠設(shè) 計(jì)模式和單例設(shè)計(jì)模式)。第七章復(fù)用類有三種方法復(fù)用類:組合,繼承,代理。組合即是在新的類里面放上已經(jīng)定義的類的對(duì)象,然后 通過(guò)調(diào)用它的方法來(lái)實(shí)現(xiàn)自己的功能。繼承是通過(guò)extends關(guān)鍵詞繼承某一父類,這樣就能訪 問(wèn)父類的所有 public 方法(因此為了繼承,一般的規(guī)則是 將父類的所有數(shù)據(jù)成員都指定為private ,將所有的方法都指定為public )。子類的初始化需要注意的是,(當(dāng)創(chuàng)建了一個(gè)子類的對(duì)象時(shí),該對(duì)象包含一個(gè)基類的子對(duì)象)java會(huì)在子類的構(gòu)造器中插入對(duì)基類默認(rèn)構(gòu)造器的調(diào)用。但是如果 沒(méi)有默認(rèn)的基類構(gòu)造器,或者想調(diào)用一個(gè)帶參數(shù)的基類構(gòu)造 器,就
7、必須用關(guān)鍵詞 super顯式地編寫調(diào)用基類構(gòu)造器的語(yǔ) 句,并且配上適當(dāng)?shù)膮?shù)列表。代理很有意思,(我們姑且使用導(dǎo)出類和基類這樣的字 眼,但要清楚我們不是在討論繼承里面的關(guān)鍵詞)在導(dǎo)出類 里保存一個(gè)基類的對(duì)象,然后用自己的方法對(duì)該基類的種種 方法進(jìn)行包裝。如何決定使用哪種方法復(fù)用類呢?is-a 就繼承,has-a就用組合。而且,組合比繼承總體上使用更廣泛、代價(jià)更小。向上轉(zhuǎn)型這個(gè)就牛逼了,第八章,第九章,第十章都與此密切相 關(guān)。看完本書之后印象最深的就是向上轉(zhuǎn)型了。使用final的原因有很多種,一定要弄清楚為什么使用 final ,是由于設(shè)計(jì)還是效率。final作用于數(shù)據(jù)的時(shí)候:final 作用在
8、基本對(duì)象比如int上,該值就成為不可改變的,一旦被初始化就無(wú)法再被 更改,但是作用在普通的對(duì)象引用的時(shí)候,final 使引用恒定不變,但是引用指向的對(duì)象是可變的。編譯器需要我們確 保final對(duì)象一定要被初始化,我們可以通過(guò)在構(gòu)造器中初 始化他們,以達(dá)到相對(duì)自由的效果(稱為空白final ,我認(rèn)為這個(gè)名字容易讓人誤解)。java允許在參數(shù)列表中以聲明 的方式將參數(shù)指明為 final ,這一特性主要用來(lái)向匿名內(nèi)部 類傳遞數(shù)據(jù)(這很重要)。final作用于方法的時(shí)候,說(shuō)明作者想保持該方法在繼承的過(guò)程中不被改變,并且不被覆蓋。同時(shí),被final修飾的方法會(huì)被關(guān)閉“動(dòng)態(tài)綁定”,這樣編譯器就會(huì)為fina
9、l方 法調(diào)用生成“有限”有效的代碼。之所以說(shuō)有限,是因?yàn)殡S 著編譯器的牛逼,它生成的代碼越來(lái)越有效。final作用于類的時(shí)候,即是作者聲明對(duì)該類的設(shè)計(jì)不 允許任何繼承。學(xué)習(xí)得更深入一些,可能對(duì)以下事實(shí)感到有興趣:java中所有的事物都是對(duì)象,每個(gè)類的編譯代碼都存在于電腦中 的文件夾里(文件夾的層次根據(jù)反轉(zhuǎn)域名得到),該文件只 有在需要使用程序代碼時(shí)才被加載。具體的說(shuō),就是“類在 其任何static 成員函數(shù)(包括構(gòu)造函數(shù))被訪問(wèn)時(shí)加載”。 第八章多態(tài)多態(tài)的重要基本原理就是向上轉(zhuǎn)型:繼承允許將對(duì)象視 為它自己本身的類型或其基類型加以處處理。將一個(gè)方法調(diào)用和一個(gè)方法主題關(guān)聯(lián)起來(lái)稱為綁定, java
10、中所有的方法都是后期綁定(除了 static 方法和final 方法),所以我們可以編寫只與基類打交道的程序代碼,并 且這些代碼對(duì)所有的導(dǎo)出類都可以正確運(yùn)行。(為什么static 不動(dòng)態(tài)綁定:因?yàn)?static 方法的主要 用法就是用類名.方法名這樣的方式來(lái)調(diào)用,不存在“發(fā)送 消息給某個(gè)對(duì)象,讓對(duì)象判斷自己怎么做”這樣的情況。為什么final不動(dòng)態(tài)綁定:這是早期final的一種用法, 由程序員指定某方法為final ,意味著程序員明了動(dòng)態(tài)綁定的機(jī)制,并且聲明該方法不需要?jiǎng)討B(tài)綁定,這樣可以獲得更好的性能。這種用法已經(jīng)很少使用了初始化的時(shí)候,導(dǎo)出類的構(gòu)造函數(shù)會(huì)自動(dòng)調(diào)用基類的默 認(rèn)構(gòu)造函數(shù),此過(guò)程一
11、直遞歸到最基本的基類。如果需要調(diào) 用有參數(shù)的構(gòu)造函數(shù)就需要手動(dòng)執(zhí)行。反過(guò)來(lái),如果需要進(jìn) 行清理工作(大部分時(shí)候我們都不需要),務(wù)必手動(dòng)執(zhí)行基 類的清理工作先。比如繼承鏈的每個(gè)類都實(shí)現(xiàn)dispose方法,那么執(zhí)行某個(gè)類的清理工作的時(shí)候,需要手動(dòng)調(diào)用。不過(guò)此種情況下,務(wù)必在執(zhí)行之前釋放成員對(duì)象,清理順序與執(zhí)行順序是相反的。此外,構(gòu)造器方面有更加復(fù)雜的調(diào)用機(jī)制,我們不用理 它,只需要知道一條有效的準(zhǔn)則“用盡可能簡(jiǎn)單的方法使對(duì) 象進(jìn)入正常狀態(tài),如果可以的話避免調(diào)用其它方法”。java編譯器能夠允許向上多態(tài),就是因?yàn)?java的機(jī)制 能保存對(duì)象的類型信息,即 rtti ,正因?yàn)檫@種機(jī)制,java 編譯器
12、也允許向下轉(zhuǎn)型, 以獲得擴(kuò)展類的“擴(kuò)展出”的方法。(另,擴(kuò)展類“擴(kuò)展”了方法的這種繼承不是“純繼承”, 這樣做好不好?用戶自己度量)。向下轉(zhuǎn)型失敗的話會(huì)拋出 一個(gè) classcastexception 。雖然這一章都是在講多態(tài),但是多態(tài)并不總是解決問(wèn)題 最好的方案,它有可能使事情不必要地復(fù)雜起來(lái),我們應(yīng)該 總是優(yōu)先考慮更加靈活的組合。第九章接口一種專門提供“接口”的類叫抽象類,若含有至少一個(gè)abstract方法,該類就必須被聲明為abstract的。抽象方法沒(méi)有方法體,派生類必須實(shí)現(xiàn)它,否則派生類也必須被生 命為抽象的。interface關(guān)鍵詞使抽象的概念更進(jìn)了一步:1.這個(gè)“類”完全抽象。2
13、. 一個(gè)類可以向上轉(zhuǎn)型為多種interface <要讓一個(gè)類遵循某個(gè)特定接口,需要使用implement關(guān)鍵字。在這一章中出現(xiàn)了“策略設(shè)計(jì)模式”這個(gè)詞。創(chuàng)建一個(gè)能夠根據(jù)所傳遞的參數(shù)對(duì)象的不同而具有不同行為的方法,被稱為策略設(shè)計(jì)模式。策略設(shè)計(jì)模式跟適配器設(shè)計(jì)模式聯(lián)合使用可以提供非常強(qiáng)大的功能,比如我們遇到了無(wú)法更改的類(別人編寫 的),想要它滿足我們的接口然后放到設(shè)計(jì)模式里面去(當(dāng) 然滿足了接口之后的用法就不止如此了),就可以編寫一個(gè) 適配器,包裝該類同時(shí)產(chǎn)生我所需要的接口。使用抽象類和接口的兩個(gè)原因是:1.在多重繼承關(guān)系中(這真的很常見,看看java api就知道了),導(dǎo)出類可以被向上轉(zhuǎn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)士資格證考試心理調(diào)適技巧試題及答案
- 小汽車上路試題及答案
- 衛(wèi)生管理證書的重要性試題及答案
- 室內(nèi)裝修裝修合同協(xié)議
- 2024年光電工程師證書考試準(zhǔn)備策略試題及答案
- 醫(yī)師執(zhí)業(yè)臨床考點(diǎn)試題及答案
- 實(shí)體店合作合同協(xié)議
- 國(guó)內(nèi)外專利制度比較的考試試題及答案
- mba邏輯試題庫(kù)及答案
- 關(guān)鍵參考西醫(yī)臨床考試試題及答案
- 氣體檢測(cè)系統(tǒng)中英文對(duì)照外文翻譯文獻(xiàn)
- 2023年中考地理位置復(fù)習(xí)課件
- “德能勤績(jī)廉”考核測(cè)評(píng)表
- GB/T 32119-2023海洋鋼制構(gòu)筑物復(fù)層礦脂包覆腐蝕控制技術(shù)
- 罩棚檐口標(biāo)識(shí)更換施工方案
- 英語(yǔ)演講比賽評(píng)分標(biāo)準(zhǔn)-評(píng)分表
- 爐壁溫度計(jì)算詳解
- 胃腸道生活質(zhì)量指數(shù)(GIQLI)
- 小說(shuō)中景物描寫的作用
- 第十二講 建設(shè)社會(huì)主義生態(tài)文明PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 幼兒園體育游戲活動(dòng)評(píng)價(jià)表
評(píng)論
0/150
提交評(píng)論