博文谷

位置:首頁 > 經典語錄 > 語錄

Thinking in Java 經典語錄推薦

語錄2.63W

1. Booch對對象的簡單描述爲:對象具有狀態、行爲和標識。這意味着每一個對象都可以擁有內部數據(給出了該對象的狀態)和方法(給出了該對象的行爲),並且每一個對象都可以唯一地與其他對象區分開來。

Thinking in Java 經典語錄推薦

2. Java裏一切都是對象,但操作的標識符實際上是對象的一個“引用”,就好比遙控器(引用)和電視機(對象)的關係。你只要握住這個遙控器就可以控制電視機。當你想調音量或者換頻道的時候,實際操控的是遙控器,再由遙控器來調控電視機。如果想在房間裏四處走走仍能遙控電視機,那麼只要攜帶遙控器而不是電視機。此外,即使沒有電視機,遙控器仍然可以單獨存在,也就是說你可以擁有一個引用,而不一定需要一個對象與之關聯,如?:String s;是允許的,但是如果這時候你要控制電視機,如od()就不允許了,因爲沒有電視機和你這個遙控器關聯,所以使用之前必須初始化,即找到一臺電視機與之關聯。

3. Java內存分配:

① 寄存器:最快的存儲區,java裏你是不能控制的,略去!

② 堆棧:存放了對象引用,但是對象不存儲在這裏;

③ 堆:用於存放所有的java對象;

④ 常量存儲:可以選擇將常量存儲在ROM裏;

⑤ 非RAM存儲:基本例子:流對象和持久化對象。後者存放在硬盤上。

4. 方法名和+參數列表=方法簽名,用於唯一的標識某個方法。

5. A a = new A(); a.f();這種調用方法的行爲通常被稱爲發送消息給對象,消息是f(),對象是a,在java裏簡單的歸納爲“向對象發送消息”。其實在java內部表示爲A.f(a,1),而A b = new A(); b.f();b.f();爲A.f(b,2),這樣把“操作對象的引用”作爲第一個參數傳進去的'原因是可以區分f()是被a調用還是b調用了。

6. 當聲明一個事物是static時,就意味着這個域或方法不與包含它的那個類的任何對象實例關聯在一起,屬於類而不是對象。有些面嚮對象語言裏稱之爲“類數據”和“類方法”。

7. 比較常量用==,比較對象可不是簡單的equals()。Equals()默認比較的是引用,要想比較內容需重寫equals()方法,好在java類庫大部分都實現了自己的equals()。

8. java不需要sizeof()操作符來告訴爲數據項分配的字節數,因爲所有數據類型在所有機器中的大小都是相同的。

9. java裏逗號的兩大用處:分隔參數列表(叫“逗號分隔符”),for循環的初始化和步進控制部分(叫“逗號操作符”)。

10. java裏的switch後跟選擇因子只能爲:int、char、枚舉(千萬別忘了!)。

11. 透過構造器,類的設計者可以確保每個對象都會得到初始化(即使你不寫,也有默認的

空構造器)。也是由於構造器的存在,所以“每個方法首字母小寫”的編碼風格並不適用於構造器(因爲它必須和類同名啊,呵呵~!)。

12. 爲什麼區分方法重載是看參數(個數、順序、數據類型)而不看返回值類型了,因爲唯 一區別方法的是方法簽名(方法名+參數列表),現在方法重載所以方法名肯定相同了,就只要看參數列表了。

13. 在static方法內部是不能調用非靜態方法的,反過來倒是可以的。但是有點變態的是,

並不是完全不能調用非靜態方法的,比如傳一個對象的引用到靜態方法裏,你是不是無語了。

14. 當說到java 的垃圾回收機制的時候,總喜歡套用官話“引用計數”,即當有引用關聯到

這個對象時,其引用計數+1,當引用離開作用域或者置爲null時,引用計數-1,當計數爲0的時候就回收這個對象佔的內存。其實並不是這樣的,沒有任何一種java虛擬機是這樣做的,因爲這種方法有種缺陷就是存在循環引用的時候,就存在“對象本應回收,但是引用計數又不爲0”的情況。其實在java虛擬機裏,採用的是“自適應”的垃圾回收機制,採用“停止-複製”和“標記-清掃”的混合技術。“停止-複製”就是暫停程序的執行,找到存活的對象並複製到另外一個堆,再幹掉這個堆,所以存在大量的數據遷移。“標記-清掃”是找到存活的對象並加以標記,等全部標記完後再清掃。

15. 複用類的方法:組合、繼承、代理。組合(has-a)最靈活,繼承(is-a)最強求且最危

險,因爲全部暴露給了子類,爲了安全就出來了代理(實現一個子集即可),所以“代理是繼承和組合的中庸之道”。請記住,還有一箇中庸之道,就是“抽象類是普通類和接口的中庸之道”,慢慢品嚐吧!

16. 將匯出類轉型爲基類,稱爲“向上轉型”,因爲在繼承圖上是向上移動的,懂嗎?呵呵~!

17. 所謂的動態綁定、後期綁定、執行時綁定就是多態!

18. 將一個方法調用同一個方法主體關聯起來被稱作綁定。後期綁定就是執行時根據對象的類型進行綁定。後期綁定也叫做動態綁定或執行時綁定。Java中除了static方法和final方法(private方法屬於final方法)之外,其餘的都是後期綁定。

19. 一個接口表示“所有實現了該特定接口的類看起來都像這樣”。接口被用來建立類與類之間的協議,有些面向對象的語言直接使用protocol關鍵字來實現。