|
第一章 對象導(dǎo)論
1. 面向?qū)ο蟮囊恍┗靖拍?BR> 接口:每個對象都有接口。 封裝:隱藏實現(xiàn)細節(jié)。 聚合:重復(fù)運用實現(xiàn)代碼。 【注】aggregation和composition的區(qū)別可以參看UML定義 集成:重復(fù)運用接口。 多態(tài):后期綁定(late binding)是它的基礎(chǔ)。 【注】late binding也叫dynamic binding動態(tài)綁定
2. 對象的生命周期 Java中對象都是分配在heap(堆)中。從heap中分配內(nèi)存所消耗的時間遠遠大于從stack產(chǎn)生存儲空間所需的時間。 【注:Stack和Heap的區(qū)別】 (1)每個應(yīng)用程序運行時,都有屬于自己的一段內(nèi)存空間,用于存放臨時變量、參數(shù)傳遞、函數(shù)調(diào)用時的PC值的保存。這叫stack。 (2)所有的應(yīng)用可以從一個系統(tǒng)共用的空間中申請供自己使用的內(nèi)存,這個共用的空間叫heap。 (3)stack中的對象或變量只要定義好就可使用了,應(yīng)用程序結(jié)束時會自動釋放。 (4)而要使用heap中申請的變量或?qū)ο笾荒芏x變量指針,并要求在運行過程中通過new來動態(tài)分配內(nèi)存空間,而且必須顯示地free你申請過的內(nèi)存,不過Java的垃圾回收機解決了這個問題,它會幫你釋放這部分內(nèi)存。 (5)stack中變量的大小和個數(shù)會影響exe的文件大小,但速度快。堆中的變量大小與exe大小關(guān)系不大,但分配和釋放需要耗費的時間遠大于stack中分配內(nèi)存所需的時間。
3. Java是單根繼承體系,所有對象都繼承自O(shè)bject。
4. 容器和迭代器 容器(container或者collection)有很多種:隊列、鏈表、哈希表、棧…… Iterator可將“容器實現(xiàn)細節(jié)”和“對容器進行訪問的動作”分離開來。
5. Java將支持(好像已經(jīng)支持了)Parameterized Types(參數(shù)化型別,大陸的說法“泛型 Generics”)。唉,臺灣的術(shù)語還不是很聽得來,侯捷這本的翻譯也一般般,很多句子念起來很拗口。
6. 垃圾回收機vs效率與彈性 垃圾回收機也不是那么完美,它的缺點在于你永遠不知道垃圾回收動作何時開始,持續(xù)多久。這意味著Java程序的執(zhí)行速率會有不一致的現(xiàn)象,因此無法應(yīng)用于即時(real time, 也有稱為實時)程序。 【注】real-time system指極重視程序執(zhí)行速率的系統(tǒng)。
7. 異常處理 Java中異常(exception)是一種對象,可在錯誤發(fā)生點被throw出來,并在異常處理程序中被catch。 【注】throw對應(yīng)于Delphi中raise。
8. 資源鎖定 多線程使得某些情況下必須對某些資源進行鎖定操作,就對象而言Java中可以用關(guān)鍵字synchronized來達到這一目的。而其他形式資源的鎖定,通??梢援a(chǎn)生一個對象代表要鎖定的資源,所有線程在訪問之前都必須加以檢驗。
9. Java界中常用字謂“let”表示小東西 比如Servlet就是由server和let組成,表示小型服務(wù)端程序。Applet是由application和let組成,表示小型應(yīng)用程序。 10. Java可以讓你在更短的時間周期內(nèi)(勝過任何一種語言)開發(fā)穩(wěn)固的程序。 不過,開發(fā)速度是以執(zhí)行速度為代價的。不過JDK1.3開始已經(jīng)引入hotspot技術(shù)用于改善執(zhí)行效率。
|