讀書(shū)筆記《Thinking in Java》-第一章-07/10/14

          16、對(duì)于非面向?qū)ο蟮木幊蹋a(chǎn)生的函數(shù)調(diào)用會(huì)引起“前期綁定”。編譯器產(chǎn)生對(duì)一個(gè)具體函數(shù)名字的調(diào)用,而連接器將這個(gè)調(diào)用解析到將要被執(zhí)行的代碼的絕對(duì)地址。相反地,在面向?qū)ο缶幊讨胁捎昧?#8220;后期綁定”,當(dāng)對(duì)象發(fā)送消息時(shí),被調(diào)用的代碼直到運(yùn)行時(shí)才能被確定。為了執(zhí)行后期綁定,Java采用一段特殊的代碼來(lái)替代絕對(duì)地址調(diào)用。這段代碼使用在對(duì)象中存儲(chǔ)的信息來(lái)計(jì)算方法體的地址。
          (多態(tài),或者說(shuō)是向上轉(zhuǎn)型。他忽略了類(lèi)型的具體細(xì)節(jié),僅僅和基類(lèi)交互。這很符合我們?nèi)祟?lèi)的思維習(xí)慣,比如你會(huì)開(kāi)車(chē),那么給你一輛奔馳你肯定能開(kāi),寶馬也可以。只需說(shuō)我在開(kāi)車(chē),而不必說(shuō)我在開(kāi)奔馳開(kāi)寶馬。當(dāng)然你可以這么說(shuō),炫耀一下也不是錯(cuò)^_^,Java允許你這么做。)

          17、(繼承就是對(duì)接口的復(fù)用,既然我們只想復(fù)用接口,那么干脆就創(chuàng)建接口,用接口去操作具體對(duì)象。接口優(yōu)于抽象類(lèi)。)

          18、Java對(duì)象是在堆中創(chuàng)建的,也就是動(dòng)態(tài)的方式。這種動(dòng)態(tài)的方式犧牲了效率,但是帶來(lái)極大的靈活性,這種靈活性正是解決一般化編程問(wèn)題的要點(diǎn)所在。Java的垃圾回收機(jī)制,可以自動(dòng)發(fā)現(xiàn)不會(huì)再被使用的對(duì)象,并繼而銷(xiāo)毀它。這種方式減少了需要考慮的議題和必要編寫(xiě)的代碼。更重要的是垃圾回收器提供了更高層次的保障,可以避免暗藏的內(nèi)存泄漏問(wèn)題。(這個(gè)問(wèn)題使得許多的C++項(xiàng)目折戟沉沙)。

          19、容器是一種持有其他對(duì)象引用的新的對(duì)象類(lèi)型,這些對(duì)象本身并不在容器中,僅僅是引用。容器有多種多樣的,因?yàn)樾枰嵌喾N多樣的,所以根據(jù)需要在已知的容器中選用合適的容器類(lèi)型就可以了。這些容器提供了相應(yīng)的方法來(lái)處理其中引用的對(duì)象,如排序、查找、存入、取出等。
          迭代器是一種選取容器中的元素,并把它呈現(xiàn)給用戶(hù)的對(duì)象。迭代器提供了一種抽象,把容器的細(xì)節(jié)從訪(fǎng)問(wèn)容器的代碼中分離出來(lái)。容器通過(guò)迭代器被簡(jiǎn)單地抽象成為一個(gè)序列。就是說(shuō),你可以遍歷整個(gè)序列,而不用擔(dān)心底層結(jié)構(gòu)。
          (這些容器就是很通用的數(shù)據(jù)結(jié)構(gòu)和算法的有機(jī)集合。)

          20、對(duì)容器的選擇:不同的容器提供了不同的接口和外部行為;不同的接口對(duì)于某些操作具有不同的效率。如:ArrayList和LinkedList具有相同的接口和外部行為。而ArrayList隨機(jī)訪(fǎng)問(wèn)元素的時(shí)間是固定的開(kāi)銷(xiāo),LinkedList則是需要在列表中移動(dòng)的,代價(jià)比較高昂,不適合做大量的隨機(jī)訪(fǎng)問(wèn)。基類(lèi)List和迭代器所帶來(lái)的抽象,把容器之間進(jìn)行轉(zhuǎn)換時(shí)對(duì)代碼產(chǎn)生的影響降低到最小限度。
          (所以,新建容器要這樣:List alist = new ArrayList();)

          21、Java的單根繼承結(jié)構(gòu)好處很多,這里就不羅嗦了。

          22、除非確切地知道所要處理的對(duì)象的類(lèi)型,否則向下轉(zhuǎn)型幾乎是不安全的。
          (向上轉(zhuǎn)型就是把馬當(dāng)作動(dòng)物處理,馬具有動(dòng)物的所有特性,所以是絕對(duì)安全的。向下轉(zhuǎn)型就是把動(dòng)物當(dāng)作馬處理,馬吃草是毫無(wú)爭(zhēng)議的,但是動(dòng)物吃草就不行了,因?yàn)楠{子老虎會(huì)不高興的:“俺可不是吃素的!”,危險(xiǎn)就在這里。)

          23、關(guān)于泛型:我看的是《Thinking in Java》第三版,使用的是j2se1.4,而此時(shí)j2se1.6都面世了。Java發(fā)展的非常迅速,早已經(jīng)支持泛型了。此處的論述已經(jīng)過(guò)時(shí)了,概不討論了……

          24、異常處理。Java的異常處理機(jī)制是非常優(yōu)秀的,異常不能被忽略,所以他保證一定會(huì)在某處得到處理。
          (程序的健壯性是衡量程序質(zhì)量的很重要的指標(biāo),不堪一擊的程序會(huì)出點(diǎn)錯(cuò)誤就只能中止退出,可以回憶一下win98時(shí)代可怕的藍(lán)屏噩夢(mèng),看到藍(lán)屏是什么感覺(jué)呢?如果我很富有,一定會(huì)砸掉電腦,換上蘋(píng)果的。程序的健壯性如同人,要要經(jīng)得起打擊,犯點(diǎn)錯(cuò)誤是難免的,改正就是了,千萬(wàn)不要自暴自棄,開(kāi)除自己的地球球籍啊……)

          25、并發(fā)性。多線(xiàn)程最常見(jiàn)的就是用戶(hù)界面。通常線(xiàn)程是一種為單一處理器分配時(shí)間的手段。如果機(jī)器有多個(gè)處理器,那么程序不需要特殊調(diào)整也能執(zhí)行得更快。Java的線(xiàn)程機(jī)制是內(nèi)置的。

          Feedback

          # re: 讀書(shū)筆記《Thinking in Java》-第一章-07/10/14  回復(fù)  更多評(píng)論   

          2007-10-16 13:40 by 翔南
          恩 寫(xiě)的挺好的!
          感覺(jué)自己的java基礎(chǔ)貌似不是很扎實(shí)..

          # re: 讀書(shū)筆記《Thinking in Java》-第一章-07/10/14  回復(fù)  更多評(píng)論   

          2007-10-16 14:46 by Raylong
          @翔南
          感謝回復(fù),我也覺(jué)得在學(xué)過(guò)一段Java之后回過(guò)頭來(lái)發(fā)現(xiàn)很多細(xì)節(jié)都忘記了,會(huì)犯一些低級(jí)錯(cuò)誤。所以就有了置頂?shù)哪瞧狫ava語(yǔ)法總結(jié)。

          # re: 讀書(shū)筆記《Thinking in Java》-第一章-07/10/14  回復(fù)  更多評(píng)論   

          2007-10-16 22:18 by zhrb
          17、(繼承就是對(duì)接口的復(fù)用,既然我們只想復(fù)用接口,那么干脆就創(chuàng)建接口,用接口去操作具體對(duì)象。接口優(yōu)于抽象類(lèi)。)

          關(guān)于這個(gè),我覺(jué)得繼承和接口是各有各的用途。并不存在接口就一定比抽象類(lèi)好的這種說(shuō)法吧。呵呵...

          # re: 讀書(shū)筆記《Thinking in Java》-第一章-07/10/14  回復(fù)  更多評(píng)論   

          2007-10-17 19:25 by Raylong
          @zhrb
          這個(gè)是在effective Java中的第16條建議,作者是Java類(lèi)庫(kù)的作者之一,說(shuō)話(huà)應(yīng)該很有分量吧。但是我沒(méi)有足夠的實(shí)踐經(jīng)驗(yàn),也體會(huì)不到接口的優(yōu)越性。所以我也不是很理解的 呵呵

          # re: 讀書(shū)筆記《Thinking in Java》-第一章-07/10/14  回復(fù)  更多評(píng)論   

          2007-10-18 11:58 by zhrb
          看了一下java tutorial里面對(duì)接口的定義,底下附1:借口是抽取相互之間沒(méi)有關(guān)系的類(lèi)的共同特征,而不用去關(guān)注類(lèi)之間的關(guān)系。
          我覺(jué)得這個(gè)是借口和抽象類(lèi)最關(guān)鍵的區(qū)別,接口是希望一組沒(méi)有層次關(guān)系的類(lèi)之間可以擁有共同的行為,而抽象類(lèi)作為父類(lèi)的話(huà),自然希望其子類(lèi)在邏輯上和父類(lèi)是有一定的關(guān)系的。比如說(shuō)一個(gè)抽象類(lèi),鳥(niǎo),可以飛。我們現(xiàn)在想設(shè)計(jì)一架飛機(jī)也可以飛,雖然我們可以讓飛機(jī)這個(gè)類(lèi)繼承自鳥(niǎo)這個(gè)抽象類(lèi),但是這兩個(gè)完全是風(fēng)馬牛不相及的東西,自然不應(yīng)該有繼承關(guān)系了。但如果是接口設(shè)計(jì)的話(huà),我們可以設(shè)計(jì)出一個(gè)flyable的接口,里面定義fly的方法,因?yàn)轼B(niǎo)和飛機(jī)都可以飛,所以我們可以讓鳥(niǎo)和飛機(jī)類(lèi)去implement這個(gè)flyable的接口。
          java tutorial還有一個(gè)例子,比如說(shuō)商店有若干種商品,各種商品之間一般不會(huì)有什么繼承關(guān)系,但是現(xiàn)在店主希望管理各種商品,所以店主希望所有的商品都實(shí)現(xiàn)一種可以稱(chēng)為管理的接口,里面包含用于管理的一些方法和屬性,如價(jià)格、索引號(hào)這樣的屬性或者設(shè)置零售價(jià)格這樣的方法。這樣接口就巧妙的將各種不相關(guān)的類(lèi)聯(lián)系起來(lái)了。所以接口給編程以極大的靈活性。
          Java中還有一些常用借口,比如說(shuō)comparable接口,任何類(lèi)只要實(shí)現(xiàn)了這個(gè)接口,都可以被compare。(好像是這樣,不確定,有錯(cuò)請(qǐng)指出)
          不過(guò)附3,看不太懂,是什么意思。大家交流一下

          附:You use an interface to define a protocol of behavior that can be implemented by any class anywhere in the class hierarchy. Interfaces are useful for the following:

          1.Capturing similarities among unrelated classes without artificially forcing a class relationship
          2.Declaring methods that one or more classes are expected to implement
          3.Revealing an object's programming interface without revealing its class
          4.Modeling multiple inheritance, a feature of some object-oriented languages that allows a class to have more than one superclass
          @Raylong

          # re: 讀書(shū)筆記《Thinking in Java》-第一章-07/10/14  回復(fù)  更多評(píng)論   

          2007-10-26 11:00 by Matthew Chen
          你可以使用接口作為一種行為的協(xié)議,它可以實(shí)現(xiàn)自繼承層次中的任何類(lèi)(也就是它可以是任何派系)。
          1.在沒(méi)有關(guān)聯(lián)的類(lèi)之間保留相似性而不依賴(lài)類(lèi)的(繼承)關(guān)系。
          2.聲明多個(gè)類(lèi)(它們多半是平行的,沒(méi)有繼承關(guān)系)中期望實(shí)現(xiàn)的方法。
          3.展現(xiàn)一個(gè)對(duì)象的編程接口而不是它的類(lèi)。(面向接口編程,ruby中的duck type的思想解釋得很形象)
          3.建立多繼承模型,一種在一些oo語(yǔ)言中允許的一個(gè)類(lèi)有多個(gè)父類(lèi)的特性。
          主站蜘蛛池模板: 故城县| 淅川县| 西盟| 乐清市| 分宜县| 沙田区| 保靖县| 邛崃市| 盐池县| 合水县| 囊谦县| 灵武市| 临沧市| 宁南县| 余江县| 吉林市| 墨江| 唐河县| 卢湾区| 永靖县| 广安市| 乌审旗| 灵台县| 镇平县| 平顺县| 乐平市| 都兰县| 十堰市| 卓尼县| 西乌珠穆沁旗| 桐城市| 酒泉市| 育儿| 曲阳县| 灵寿县| 汽车| 浦县| 景洪市| 东源县| 上犹县| 石柱|