Java編程思想讀書筆記
這是一份試圖提綱挈領的讀書筆記,《java編程思想》這本八百多頁的書娓娓道來地包含了太多細節,這對讀者是非常貼心的,我也強烈建議細細讀這本書,如果你希望在短時間內學會java這種語言,那么這本書不是最好的選擇,你可以看看譚浩強系列。我把看這本書的過程中,個人覺得每一章中最重要的思想、用整理在這里,希望自己回顧的時候有所參照和提高。也希望大家帶著同樣的目的來看本篇讀書筆記。
第一章 對象導論
比起過程型語言編寫的程序,用面向對象語言編寫的程序更加簡單、易于理解、可復用。《c++編程思想》里也有這一章,是一個拋磚引自己的玉的章節,不明白可以跳過,回頭再看。
第二章 一切都是對象
java語言里面,一切都是對象,并且程序員是通過引用來操縱對象。一個簡單的例子,非常輕松地讓讀者進入java的世界。需要注意的是java數據會儲存在5個不同的地方:寄存器、堆棧、堆、常量存儲、非ram存儲,用new創建的一般對象都放在堆中,而特殊的基本對象放在堆棧中,如果想把基本對象也放在堆中,需要包裝基本類型。
第三章 操作符
java中的操作符語法類似于c,所以學習起來一點困難也沒有。要特別注意兩個比較大的整數相加或者相乘的時候的溢出問題,用long或者biginteger解決這個問題。
第四章 控制執行流程
我想起《pointer on c》這本書第一章就有這一句話,本書適合那些希望迅速學習一門新語言而不是被“為什么if和for很重要”的弱智問題耽擱進度的讀者。呵呵,這一章很不厭其煩地介紹了運算、操作符優先級、類型轉換、選擇循環等基本特性,有c或者c++編程經驗的讀者可以大概瀏覽一下。
第五章 初始化和清理
關于初始化:
1.初始化很重要,一定不要忘記。而且java編譯器會很好的防止使用未初始化數據的意外,這是比c和c++更優的地方。
2.編譯器初始化的順序為:
a.類首次加載的時候,有關靜態初始化的所有動作都會執行。
a1.類的加載包括首次創建該類型的對象,或者該類的靜態方法/靜態域首次被訪問
a2.靜態域的初始化在一切初始化之前,即靜態變量散布在代碼不同的地方,它們也會在任何方法(包括構造器)調用之前被初始化
b.當用new calssname()創建對象的時候,會在堆上開辟足夠的存儲空間,這塊存儲空間被清零,然后執行字段的初始化動作。(這里的字段初始化都是非靜態的,因為靜態的變量已經在a中執行完畢,而且靜態變量存儲在不同的地方,靜態數據只占用一份存儲空間)
c.執行構造器
關于清理
c++關于清理的部分包含很大不確定性。目前需要知道的事情是,正常情況下,我們是不需要調用finalize方法的,而且垃圾回收區會自動回收不再使用的對象,同時我們需要自己注意一些需要關閉的文件。
需要注意的是,用=對數組進行“賦值”的時候,實際上是引用的傳遞,就是說,二者指向同一堆。
第六章 訪問權限控制
關于包
你應該有一個自己的域名,這樣發布你的java程序的時候,就可以將你的包名設置為你的域名倒轉。想要正確讓包工作,要正確設置classpath,對于新手來說,這的確是一個挑戰。我當初就難到了。
關于訪問權限修飾詞
值得注意的是,如果兩個編譯單元放在同一個目錄下并且都沒有設置包名的話,他們對于對方都是擁有包訪問權限的。訪問權限修飾詞是修飾方法和數據,而不是類。類只有兩種訪問權限,包訪問權限或public訪問權限。默認為包訪問權限。如果不希望其它任何人對該類擁有訪問權限,可以把所有的構造器設置為private。但是有一個例外,可以通過該類自己的static成員內部創建(于是就有了工廠設計模式和單例設計模式)。
第七章 復用類
有三種方法復用類:組合,繼承,代理。
組合即是在新的類里面放上已經定義的類的對象,然后通過調用它的方法來實現自己的功能。
繼承是通過extends關鍵詞繼承某一父類,這樣就能訪問父類的所有public方法(因此為了繼承,一般的規則是將父類的所有數據成員都指定為private,將所有的方法都指定為public)。子類的初始化需要注意的是,(當創建了一個子類的對象時,該對象包含一個基類的子對象)java會在子類的構造器中插入對基類默認構造器的調用。但是如果沒有默認的基類構造器,或者想調用一個帶參數的基類構造器,就必須用關鍵詞super顯式地編寫調用基類構造器的語句,并且配上適當的參數列表。