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