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