Java, Only Java!

          統(tǒng)計(jì)

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評(píng)論排行榜

          《Java大學(xué)教程》—第24章 Java的背景

          本章主要介紹的是Java的背景知識(shí),通過了解歷史知道Java與其他語言的區(qū)別,以便更好選擇在什么場(chǎng)景下使用Java。

          24.2    語言的尺寸
          Java語言短小、緊湊,以C++為基礎(chǔ),放棄了一些特定的語言特征(指針和多繼承)
          注:需要關(guān)注的是為什么放棄這兩個(gè)特征,有沒有替代方案,各自的優(yōu)缺點(diǎn)。

          24.2.1    指針(pointer)
          指針是一種變量,并且變量中包含了某個(gè)存儲(chǔ)器地址。
          Java不允許使用指針,因?yàn)橹羔樦赶虻氖蔷唧w的物理地址,直接操縱物理地址中的數(shù)據(jù),容易使程序出現(xiàn)不可預(yù)料的問題。
          Java通過創(chuàng)建引用()來實(shí)現(xiàn)對(duì)地址的訪問。通過引用也可以把地址作為變量傳送。

          24.2.2    多繼承(multiple inheritance)
          多繼承允許一個(gè)類繼承于多個(gè)超類。
          Java不允許多繼承:因?yàn)槎嗬^承使用不多,且編程復(fù)雜,容易出錯(cuò)。
          Java允許繼承一個(gè)基類,實(shí)現(xiàn)多個(gè)接口的方式實(shí)現(xiàn)多繼承。

          24.3    語言的可靠性
          24.3.1    別名(alias)
          別名會(huì)導(dǎo)致不同的對(duì)象變量指向同樣的對(duì)象。
          因?yàn)閷?duì)象變量中存儲(chǔ)的對(duì)象地址相同,從而出現(xiàn)兩個(gè)修改同一對(duì)象數(shù)據(jù)的入口,容易造成混淆。
          為此Java提供了兩種拷貝機(jī)制:深拷貝(對(duì)象的數(shù)據(jù)的拷貝)和淺拷貝(對(duì)象的引用的拷貝)。
          深拷貝可以保護(hù)原始對(duì)象不受影響,但是需要消耗時(shí)間和空間,用于保護(hù)數(shù)據(jù)安全的領(lǐng)域使用。利用clone方法。
          淺拷貝提供了原始對(duì)象的地址,不需要消耗過多的時(shí)間和空間,但是必須小心的使用,以免造成不可預(yù)料的問題。利用別名機(jī)制。

          24.3.2    重寫clone方法
          protected的方法可以被重寫為public的方法,但是public的方法不可以重寫為protected方法。
          注:因?yàn)橐呀?jīng)在父類已經(jīng)是public的方法,就算子類重寫為protected方法,那么訪問者依然可以通過父類實(shí)現(xiàn)訪問,所以不容許public方法重寫成protected方法。

          24.3.3    不變對(duì)象
          如果對(duì)象中不存在變更它們狀態(tài)的方法,則對(duì)象稱為不變對(duì)象。
          如果對(duì)象是不可變的,則不必?fù)?dān)心創(chuàng)建對(duì)象的別名會(huì)造成不可預(yù)料的問題。

          24.3.4    使用Object類的clone方法
          Object類的clone方法復(fù)制了分配給對(duì)象屬性的存儲(chǔ)器的內(nèi)容,也稱為按位拷貝(bitwise copy)。即完全復(fù)制了原始類型(primitive type)的屬性的內(nèi)容,并且復(fù)制了屬性的引用。
          *    如果類的屬性都是基本類型的,則重載clone方法只需要調(diào)用Object類的clone方法;
          *    如果類的屬性有對(duì)象類型的,并且這些對(duì)象都是不可變的,則重載clone方法只需要調(diào)用Object類的clone方法。
          *    如果類的屬性包含非不可變對(duì)象,則無法利用Object類的clone方法進(jìn)行復(fù)制,必須自己編寫代碼來實(shí)現(xiàn)clone方法。

          如果需要使用Object類的clone方法,需要標(biāo)識(shí)類實(shí)現(xiàn)了Cloneable接口,這個(gè)接口也是個(gè)標(biāo)識(shí)接口,沒有包含任何方法。

          24.3.5    垃圾收集
          Java使用異常處理技術(shù)來監(jiān)視內(nèi)存耗盡問題,并且可以編寫代碼來確保程序正常地終止。
          Java語言具有一種內(nèi)嵌的垃圾收集功能,該功能能夠釋放未被使用的內(nèi)存。通過搜索程序所使用的內(nèi)存空間,釋放不再被使用的內(nèi)存。

          自測(cè)題:
          1.    指針與引用的區(qū)別:
          指針保存了地址,并且可以通過代碼修改和操縱這個(gè)地址的數(shù)據(jù)。
          引用保存了地址,但是這個(gè)地址不能通過代碼修改,也不能隨便改變?cè)L問的類型,例如:不能按字節(jié)訪問地址中的信息。

          2.    多繼承:
          多繼承允許一個(gè)類繼承于多個(gè)超類。
          Java不允許多繼承:因?yàn)槎嗬^承使用不多,且編程復(fù)雜,容易出錯(cuò)。
          Java允許繼承一個(gè)基類,實(shí)現(xiàn)多個(gè)接口的方式實(shí)現(xiàn)多繼承。

          3.    Critical.java

          a)    因?yàn)镃ritical對(duì)象存在變更它們狀態(tài)的方法,所以是可變對(duì)象。

          b)    CriticalTest.java

          c)    Critical.java

          d)    CriticalTest.java

          4.
          a)    為什么方法返回的都是別名:方便調(diào)用的方法修改里面的數(shù)據(jù),對(duì)于不可變對(duì)象也提高傳送數(shù)據(jù)的效率。
          b)    為什么別名可能有危險(xiǎn):因?yàn)檎{(diào)用方法的代碼可能會(huì)修改原始數(shù)據(jù),造成不可意料的數(shù)據(jù)錯(cuò)誤。
          c)    如何避免別名:創(chuàng)建clone方法,返回的對(duì)象都采用深拷貝。

          5.    垃圾收集功能的優(yōu)點(diǎn)和缺點(diǎn):
          優(yōu)點(diǎn):簡化程序員的工作,避免出現(xiàn)內(nèi)存泄漏或者內(nèi)存耗盡的問題。
          缺點(diǎn):降低代碼執(zhí)行的速度,對(duì)于實(shí)時(shí)應(yīng)用會(huì)突然出現(xiàn)響應(yīng)不及時(shí)的問題。

          編程練習(xí):代碼附件
              Critical.java    CriticalTest.java

          posted on 2016-10-06 14:31 zYx.Tom 閱讀(336) 評(píng)論(0)  編輯  收藏 所屬分類: 1.Java世界

          主站蜘蛛池模板: 永城市| 高安市| 临邑县| 加查县| 鹤峰县| 青铜峡市| 仁寿县| 泰兴市| 兴城市| 宁乡县| 景洪市| 吉木乃县| 台安县| 吴江市| 西乌珠穆沁旗| 营山县| 张掖市| 庆安县| 渑池县| 岳西县| 景宁| 乌恰县| 西藏| 华坪县| 铅山县| 开原市| 武山县| 江口县| 沙洋县| 元氏县| 澜沧| 南靖县| 庆阳市| 抚州市| 梁河县| 唐山市| 六安市| 镇宁| 乡宁县| 集贤县| 博爱县|