讀書筆記《Thinking in Java》-第一章-07/10/14
16、對于非面向?qū)ο蟮木幊蹋a(chǎn)生的函數(shù)調(diào)用會引起“前期綁定”。編譯器產(chǎn)生對一個(gè)具體函數(shù)名字的調(diào)用,而連接器將這個(gè)調(diào)用解析到將要被執(zhí)行的代碼的絕對地址。相反地,在面向?qū)ο缶幊讨胁捎昧?#8220;后期綁定”,當(dāng)對象發(fā)送消息時(shí),被調(diào)用的代碼直到運(yùn)行時(shí)才能被確定。為了執(zhí)行后期綁定,Java采用一段特殊的代碼來替代絕對地址調(diào)用。這段代碼使用在對象中存儲的信息來計(jì)算方法體的地址。
(多態(tài),或者說是向上轉(zhuǎn)型。他忽略了類型的具體細(xì)節(jié),僅僅和基類交互。這很符合我們?nèi)祟惖乃季S習(xí)慣,比如你會開車,那么給你一輛奔馳你肯定能開,寶馬也可以。只需說我在開車,而不必說我在開奔馳開寶馬。當(dāng)然你可以這么說,炫耀一下也不是錯(cuò)^_^,Java允許你這么做。)
17、(繼承就是對接口的復(fù)用,既然我們只想復(fù)用接口,那么干脆就創(chuàng)建接口,用接口去操作具體對象。接口優(yōu)于抽象類。)
18、Java對象是在堆中創(chuàng)建的,也就是動態(tài)的方式。這種動態(tài)的方式犧牲了效率,但是帶來極大的靈活性,這種靈活性正是解決一般化編程問題的要點(diǎn)所在。Java的垃圾回收機(jī)制,可以自動發(fā)現(xiàn)不會再被使用的對象,并繼而銷毀它。這種方式減少了需要考慮的議題和必要編寫的代碼。更重要的是垃圾回收器提供了更高層次的保障,可以避免暗藏的內(nèi)存泄漏問題。(這個(gè)問題使得許多的C++項(xiàng)目折戟沉沙)。
19、容器是一種持有其他對象引用的新的對象類型,這些對象本身并不在容器中,僅僅是引用。容器有多種多樣的,因?yàn)樾枰嵌喾N多樣的,所以根據(jù)需要在已知的容器中選用合適的容器類型就可以了。這些容器提供了相應(yīng)的方法來處理其中引用的對象,如排序、查找、存入、取出等。
迭代器是一種選取容器中的元素,并把它呈現(xiàn)給用戶的對象。迭代器提供了一種抽象,把容器的細(xì)節(jié)從訪問容器的代碼中分離出來。容器通過迭代器被簡單地抽象成為一個(gè)序列。就是說,你可以遍歷整個(gè)序列,而不用擔(dān)心底層結(jié)構(gòu)。
(這些容器就是很通用的數(shù)據(jù)結(jié)構(gòu)和算法的有機(jī)集合。)
20、對容器的選擇:不同的容器提供了不同的接口和外部行為;不同的接口對于某些操作具有不同的效率。如:ArrayList和LinkedList具有相同的接口和外部行為。而ArrayList隨機(jī)訪問元素的時(shí)間是固定的開銷,LinkedList則是需要在列表中移動的,代價(jià)比較高昂,不適合做大量的隨機(jī)訪問。基類List和迭代器所帶來的抽象,把容器之間進(jìn)行轉(zhuǎn)換時(shí)對代碼產(chǎn)生的影響降低到最小限度。
(所以,新建容器要這樣:List alist = new ArrayList();)
21、Java的單根繼承結(jié)構(gòu)好處很多,這里就不羅嗦了。
22、除非確切地知道所要處理的對象的類型,否則向下轉(zhuǎn)型幾乎是不安全的。
(向上轉(zhuǎn)型就是把馬當(dāng)作動物處理,馬具有動物的所有特性,所以是絕對安全的。向下轉(zhuǎn)型就是把動物當(dāng)作馬處理,馬吃草是毫無爭議的,但是動物吃草就不行了,因?yàn)楠{子老虎會不高興的:“俺可不是吃素的!”,危險(xiǎn)就在這里。)
23、關(guān)于泛型:我看的是《Thinking in Java》第三版,使用的是j2se1.4,而此時(shí)j2se1.6都面世了。Java發(fā)展的非常迅速,早已經(jīng)支持泛型了。此處的論述已經(jīng)過時(shí)了,概不討論了……
24、異常處理。Java的異常處理機(jī)制是非常優(yōu)秀的,異常不能被忽略,所以他保證一定會在某處得到處理。
(程序的健壯性是衡量程序質(zhì)量的很重要的指標(biāo),不堪一擊的程序會出點(diǎn)錯(cuò)誤就只能中止退出,可以回憶一下win98時(shí)代可怕的藍(lán)屏噩夢,看到藍(lán)屏是什么感覺呢?如果我很富有,一定會砸掉電腦,換上蘋果的。程序的健壯性如同人,要要經(jīng)得起打擊,犯點(diǎn)錯(cuò)誤是難免的,改正就是了,千萬不要自暴自棄,開除自己的地球球籍啊……)
25、并發(fā)性。多線程最常見的就是用戶界面。通常線程是一種為單一處理器分配時(shí)間的手段。如果機(jī)器有多個(gè)處理器,那么程序不需要特殊調(diào)整也能執(zhí)行得更快。Java的線程機(jī)制是內(nèi)置的。