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