Thinking in Java 經(jīng)典語錄推薦
1. Booch對對象的簡單描述為:對象具有狀態(tài)、行為和標(biāo)識。這意味著每一個對象都可以擁有內(nèi)部數(shù)據(jù)(給出了該對象的狀態(tài))和方法(給出了該對象的行為),并且每一個對象都可以唯一地與其他對象區(qū)分開來。
2. Java里一切都是對象,但操作的標(biāo)識符實際上是對象的一個“引用”,就好比遙控器(引用)和電視機(對象)的關(guān)系。你只要握住這個遙控器就可以控制電視機。當(dāng)你想調(diào)音量或者換頻道的時候,實際操控的是遙控器,再由遙控器來調(diào)控電視機。如果想在房間里四處走走仍能遙控電視機,那么只要攜帶遙控器而不是電視機。此外,即使沒有電視機,遙控器仍然可以單獨存在,也就是說你可以擁有一個引用,而不一定需要一個對象與之關(guān)聯(lián),如?:String s;是允許的,但是如果這時候你要控制電視機,如s.method()就不允許了,因為沒有電視機和你這個遙控器關(guān)聯(lián),所以使用之前必須初始化,即找到一臺電視機與之關(guān)聯(lián)。
3. Java內(nèi)存分配:
、 寄存器:最快的存儲區(qū),java里你是不能控制的,略去!
、 堆棧:存放了對象引用,但是對象不存儲在這里;
③ 堆:用于存放所有的java對象;
④ 常量存儲:可以選擇將常量存儲在ROM里;
⑤ 非RAM存儲:基本例子:流對象和持久化對象。后者存放在硬盤上。
4. 方法名和+參數(shù)列表=方法簽名,用于唯一的標(biāo)識某個方法。
5. A a = new A(); a.f();這種調(diào)用方法的行為通常被稱為發(fā)送消息給對象,消息是f(),對象是a,在java里簡單的歸納為“向?qū)ο蟀l(fā)送消息”。其實在java內(nèi)部表示為A.f(a,1),而A b = new A(); b.f();b.f();為A.f(b,2),這樣把“操作對象的引用”作為第一個參數(shù)傳進去的原因是可以區(qū)分f()是被a調(diào)用還是b調(diào)用了。
6. 當(dāng)聲明一個事物是static時,就意味著這個域或方法不與包含它的那個類的任何對象實例關(guān)聯(lián)在一起,屬于類而不是對象。有些面向?qū)ο笳Z言里稱之為“類數(shù)據(jù)”和“類方法”。
7. 比較常量用==,比較對象可不是簡單的equals()。Equals()默認(rèn)比較的是引用,要想比較內(nèi)容需重寫equals()方法,好在java類庫大部分都實現(xiàn)了自己的equals()。
8. java不需要sizeof()操作符來告訴為數(shù)據(jù)項分配的字節(jié)數(shù),因為所有數(shù)據(jù)類型在所有機器中的`大小都是相同的。
9. java里逗號的兩大用處:分隔參數(shù)列表(叫“逗號分隔符”),for循環(huán)的初始化和步進控制部分(叫“逗號操作符”)。
10. java里的switch后跟選擇因子只能為:int、char、枚舉(千萬別忘了。。
11. 通過構(gòu)造器,類的設(shè)計者可以確保每個對象都會得到初始化(即使你不寫,也有默認(rèn)的
空構(gòu)造器)。也是由于構(gòu)造器的存在,所以“每個方法首字母小寫”的編碼風(fēng)格并不適用于構(gòu)造器(因為它必須和類同名啊,呵呵~。。
12. 為什么區(qū)分方法重載是看參數(shù)(個數(shù)、順序、數(shù)據(jù)類型)而不看返回值類型了,因為唯 一區(qū)別方法的是方法簽名(方法名+參數(shù)列表),現(xiàn)在方法重載所以方法名肯定相同了,就只要看參數(shù)列表了。
13. 在static方法內(nèi)部是不能調(diào)用非靜態(tài)方法的,反過來倒是可以的。但是有點變態(tài)的是,
并不是完全不能調(diào)用非靜態(tài)方法的,比如傳一個對象的引用到靜態(tài)方法里,你是不是無語了。
14. 當(dāng)說到j(luò)ava 的垃圾回收機制的時候,總喜歡套用官話“引用計數(shù)”,即當(dāng)有引用關(guān)聯(lián)到
這個對象時,其引用計數(shù)+1,當(dāng)引用離開作用域或者置為null時,引用計數(shù)-1,當(dāng)計數(shù)為0的時候就回收這個對象占的內(nèi)存。其實并不是這樣的,沒有任何一種java虛擬機是這樣做的,因為這種方法有種缺陷就是存在循環(huán)引用的時候,就存在“對象本應(yīng)回收,但是引用計數(shù)又不為0”的情況。其實在java虛擬機里,采用的是“自適應(yīng)”的垃圾回收機制,采用“停止-復(fù)制”和“標(biāo)記-清掃”的混合技術(shù)!巴V-復(fù)制”就是暫停程序的執(zhí)行,找到存活的對象并復(fù)制到另外一個堆,再干掉這個堆,所以存在大量的數(shù)據(jù)遷移!皹(biāo)記-清掃”是找到存活的對象并加以標(biāo)記,等全部標(biāo)記完后再清掃。
15. 復(fù)用類的方法:組合、繼承、代理。組合(has-a)最靈活,繼承(is-a)最強求且最危
險,因為全部暴露給了子類,為了安全就出來了代理(實現(xiàn)一個子集即可),所以“代理是繼承和組合的中庸之道”。請記住,還有一個中庸之道,就是“抽象類是普通類和接口的中庸之道”,慢慢品嘗吧!
16. 將導(dǎo)出類轉(zhuǎn)型為基類,稱為“向上轉(zhuǎn)型”,因為在繼承圖上是向上移動的,懂嗎?呵呵~!
17. 所謂的動態(tài)綁定、后期綁定、運行時綁定就是多態(tài)!
18. 將一個方法調(diào)用同一個方法主體關(guān)聯(lián)起來被稱作綁定。后期綁定就是運行時根據(jù)對象的類型進行綁定。后期綁定也叫做動態(tài)綁定或運行時綁定。Java中除了static方法和final方法(private方法屬于final方法)之外,其余的都是后期綁定。
19. 一個接口表示“所有實現(xiàn)了該特定接口的類看起來都像這樣”。接口被用來建立類與類之間的協(xié)議,有些面向?qū)ο蟮恼Z言直接使用protocol關(guān)鍵字來實現(xiàn)。
【Thinking in Java 經(jīng)典語錄】相關(guān)文章:
thinking是什么意思09-14
以 Good at thinking為題的英語作文05-30
側(cè)田《Thinking Out Loud》歌詞07-20
java集合總結(jié)04-07
java簡歷模板03-24
java實習(xí)報告12-15
java實習(xí)報告06-21
java培訓(xùn)心得04-14
java實習(xí)報告06-16