天天看點

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

0.Outline

        軟體構造第四章Data Type and Type Checking主要涉及以下幾部分内容:

                ①基本資料類型、對象資料類型

                ②靜态/動态類型檢查

                ③Mutable/Immutable

                ④Snapshot diagram

1.基本資料類型/對象資料類型

        Java中的資料類型包括基本資料類型和對象資料類型兩種,其中對象資料類型又被稱為引用資料類型。為便于了解,可以将其類比為C語言中基本類型與指針的關系。

        基本資料類型主要包括Java中的int、long、byte、char、float、double、boolean等類型,申請時使用棧記憶體,引用為值引用。

        對象資料類型為Java中定義的各種class,使用時在堆中配置設定記憶體,引用一般為位址引用。

        二者差別與聯系如下圖所示:

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

2.靜态/動态類型檢查

        靜态類型檢查簡而言之就是Java代碼在運作前的檢查,主要對文法、函數名、形參類型、形參數目、傳回值類型以及是否存在非法的指派(指派号左右類型不同)進行檢查。

        動态類型檢查則是在Java程式運作時對值進行的檢查,例如:Java程式在運作時發生了除零錯誤,這種值錯誤在運作前是無法檢查的,故需要動态類型檢查對其進行檢查。動态類型檢查主要包括:非法參數、非法傳回值、數組越界、空指針等。

3.Mutable and Immutable

        Immutable類型是指無法改變其值的類型,對其進行改變隻能通過建立新的對象,改變其引用位址的方法實作。

        以下将通過Immutable類型String和與其對應的Mutable類型StringBuilder的比較介紹二者的差別:

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram
軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

        如圖所示,s為String類型,sb為StringBuilder類型,同樣是将其值由“a”變為“ab”,String類型需要在記憶體中額外建立一個新的String字元串“ab”,然後将s的指向由“a”變為“ab”;而StringBuilder類型隻需要将原有記憶體中的“a”變為“ab”即可,無需對引用位址做出改變。

        Immutable類型的優勢在于其不可改變性,這個性質對于程式的可靠性有着很大的意義。例如:在一個類中存在一個成員變量,假如其為Mutable類型,在該類外如果存在對該變量的别名引用,那麼将導緻類内的變量值也跟着改變,造成意想不到的bug。而Immutable類型也存在局限性,因為每次改變都要重新申請記憶體空間,這樣會給垃圾收集器造成很大的麻煩,同時也會影響程式效率,比如按字元輸入n個字元的字元串,如果采用String類型,那麼輸入的時間複雜度就為O(n2)。

        為了防止避免可能存在的表示洩露,我們在Observer方法傳遞Mutable類型時,通常使用defensive copy的方式,傳回一個新的Mutable對象,這樣可以防止使用者利用傳遞出的Mutable類型的引用對類内資料進行更改。

4.Snapshot Diagram

        Snapshot屬于Run-time、Moment、Code-level的角度對軟體進行的刻畫。本節中将主要介紹其基本畫法。

        <1>基本資料類型:單箭頭、無圈

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

        <2>引用資料類型

                ①Mutable類型:單箭頭、單圈

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

                ②Immutable類型:單箭頭、雙圈

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

        <3>關鍵字final定義的資料類型:雙箭頭

軟體構造 Chapter4 Review0.Outline1.基本資料類型/對象資料類型2.靜态/動态類型檢查3.Mutable and Immutable4.Snapshot Diagram

繼續閱讀