Java, Only Java!

          統計

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評論排行榜

          《Java大學教程》—第24章 Java的背景

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

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

          24.2.1    指針(pointer)
          指針是一種變量,并且變量中包含了某個存儲器地址。
          Java不允許使用指針,因為指針指向的是具體的物理地址,直接操縱物理地址中的數據,容易使程序出現不可預料的問題。
          Java通過創建引用()來實現對地址的訪問。通過引用也可以把地址作為變量傳送。

          24.2.2    多繼承(multiple inheritance)
          多繼承允許一個類繼承于多個超類。
          Java不允許多繼承:因為多繼承使用不多,且編程復雜,容易出錯。
          Java允許繼承一個基類,實現多個接口的方式實現多繼承。

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

          24.3.2    重寫clone方法
          protected的方法可以被重寫為public的方法,但是public的方法不可以重寫為protected方法。
          注:因為已經在父類已經是public的方法,就算子類重寫為protected方法,那么訪問者依然可以通過父類實現訪問,所以不容許public方法重寫成protected方法。

          24.3.3    不變對象
          如果對象中不存在變更它們狀態的方法,則對象稱為不變對象。
          如果對象是不可變的,則不必擔心創建對象的別名會造成不可預料的問題。

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

          如果需要使用Object類的clone方法,需要標識類實現了Cloneable接口,這個接口也是個標識接口,沒有包含任何方法。

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

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

          2.    多繼承:
          多繼承允許一個類繼承于多個超類。
          Java不允許多繼承:因為多繼承使用不多,且編程復雜,容易出錯。
          Java允許繼承一個基類,實現多個接口的方式實現多繼承。

          3.    Critical.java

          a)    因為Critical對象存在變更它們狀態的方法,所以是可變對象。

          b)    CriticalTest.java

          c)    Critical.java

          d)    CriticalTest.java

          4.
          a)    為什么方法返回的都是別名:方便調用的方法修改里面的數據,對于不可變對象也提高傳送數據的效率。
          b)    為什么別名可能有危險:因為調用方法的代碼可能會修改原始數據,造成不可意料的數據錯誤。
          c)    如何避免別名:創建clone方法,返回的對象都采用深拷貝。

          5.    垃圾收集功能的優點和缺點:
          優點:簡化程序員的工作,避免出現內存泄漏或者內存耗盡的問題。
          缺點:降低代碼執行的速度,對于實時應用會突然出現響應不及時的問題。

          編程練習:代碼附件
              Critical.java    CriticalTest.java

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

          主站蜘蛛池模板: 凤冈县| 合川市| 远安县| 兰坪| 化隆| 阿瓦提县| 金山区| 深水埗区| 安多县| 霍州市| 昌宁县| 榆社县| 合川市| 曲靖市| 武强县| 商城县| 榆中县| 乡宁县| 西乌珠穆沁旗| 全州县| 本溪| 依兰县| 台安县| 灵台县| 建平县| 格尔木市| 天津市| 民勤县| 宁明县| 金溪县| 万荣县| 浦县| 鄂托克旗| 元氏县| 乐业县| 高尔夫| 贵州省| 兴和县| 新邵县| 新绛县| 南京市|