6 物件導向

2021-07-09 12:12:36 字數 3200 閱讀 9377

1、系統結構圖(xmind)

——1.理解物件導向

賈伯斯是這樣理解物件導向的:

物件就像人一樣,也是活生生的生命。他們有知識,知道怎麼完成任務;他們有記憶,可以把發生的事情記下來。而你和他們的互動並不是低層次的,你是與他們在乙個高度抽象的層面上互動,就像我們現在的對話一樣。

我舉個例子來說明。如果我是乙個「洗衣」物件,你可以把髒衣服給我,然後告訴我說:「請幫我把這些衣服洗了吧!」而我恰好知道舊金山最好的洗衣房在哪,並且我會說英語,兜裡也有美元。於是我出門打了一輛計程車,告訴司機帶我去位於舊金山的洗衣房。我到了那裡洗好衣服之後,又坐車回到這裡。我把洗好的衣服交還給你,說:「你的衣服已經洗好了。」

你並不知道我是怎麼做到的。你不知道**有洗衣店,也可能只會說法語,或者是兜裡沒錢,連車都打不了。但是我知道怎麼完成這項任務,而你不需要知道任何細節。所有的這些複雜流程都隱藏在我的內部,而我們之間可以高度抽象地互動。這就是物件。他們把複雜過程封裝在內部,而對外呈現的介面是高層次的,抽象的。

——2、成員變數和區域性變數

之前我們用到的基本都是區域性變數,現在我們將會使用成員變數。其實它兩都是變數,規範寫法上也沒啥區別,都是識別符號,但是在作用範圍和記憶體中分配不同。

區別:成員變數:

a)成員變數定義在類中,在整個類中都可以被訪問。

b) 成員變數隨著物件的建立而建立,存在於物件所在的堆記憶體中。

c) 成員變數有預設初始化值。

區域性變數:

a) 區域性變數只定義在區域性範圍內,如:函式內,語句內等。

b) 區域性變數存在於棧記憶體中。

c) 作用的範圍結束,變數空間會自動釋放。

d) 區域性變數沒有預設初始化值。

——3.匿名物件

慄:

class car

}class cardemo

public static void show(car c)

}

執行結果:

——4.封裝的表現形式之一——private(私有)

private關鍵字:許可權修飾符;用於修飾類中的成員(成員變數,成員函式);私有只在本類中有效。

常用之一:

將成員變數私有化,對外提供對應的set,get方法對其進行訪問。提高對資料訪問的安全性。

如:我有乙個人物件,而年齡這一屬性我不想被物件訪問,我就可以將其設為private。

——5.建構函式

1.細節:當乙個類沒有定義建構函式時,那麼系統就會預設給該類加入乙個空引數的建構函式。當在類中自定義了建構函式後,預設的建構函式就沒有了。

2、建構函式和一般函式在寫法上有不同。

在執行上也有不同:

建構函式式在物件一建立就執行,給物件初始化。而一般方法是物件呼叫才執行,給是物件新增物件具備的功能。乙個物件建立,建構函式只執行一次。而一般方法可以被該物件呼叫多次。

3、什麼時候定義建構函式?

當分析事物時,該事物存在具備一些特性或者行為,那麼將這些內容定義在建構函式中。

4、構造**塊

作用:給物件進行初始化。物件一建立就執行,而且優先於建構函式執行。

和建構函式的區別:

構造**塊是給所以物件進行初始化。

而建構函式是給對應的物件初始化。

構造**塊中定義的是不同物件共性的初始化內容。

——6.this關鍵字

慄:

class person  

person(string name)

person(string name,int age)

public void speak()

public void show()

}

以上程式綜合了建構函式和this的用法。看上去,是用於區分區域性變數與成員變數同名情況。

this代表它所在函式所屬物件的引用。

——7.static關鍵字

1. 由於靜態成員可以直接被類名呼叫,因此靜態成員變數又稱為類變數。而非靜態成員變數又被稱為例項變數

例項變數和類變數的區別:

存放位置:

類變數隨著類的載入而存在於方法區中。

例項變數隨著物件的建立而存在於堆記憶體中。

生命週期:

類變數生命週期最長,隨著類的消失而消失。

例項變數生命週期隨著物件的消失而消失。

2.靜態的利弊

利處:對物件共享資料進行單獨空間的儲存,節省空間。沒有必要每乙個物件中都儲存乙份。可以直接被類名呼叫。

弊端:生命週期過長。

訪問出現侷限性。(只能訪問靜態)

3.什麼時候使用靜態?

從兩方面下手: 因為靜態修飾的內容有成員變數和函式。

4.什麼時候定義靜態變數(類變數)呢?

當物件中出現共享資料時,該資料被靜態所修飾。

物件中的特有資料要定義成非靜態存在於堆記憶體中。

5.什麼時候定義靜態函式呢?

當功能內部沒有訪問到非靜態資料(物件的特有資料),那麼該功能可以定義成靜態的。

6.靜態使用注意事項:

1、靜態方法只能訪問靜態成員。

非靜態方法既可以訪問靜態也可以訪問非靜態。

2、靜態方法中不可以定義this,super關鍵字。

因為靜態優先於物件存在。所以靜態方法中不可以出現this。

3、主函式是靜態的。

7.靜態**塊:

static

特點:隨著類的載入而執行,執行一次。並優先於主函式。用於給類進行初始化。

8.物件的初始化過程:

1、把類名.class檔案載入到記憶體中。

2、執行該類中的static**塊,如果有得話,給該類進行初始化。

3、在堆記憶體中開闢空間,分配記憶體位址。給物件

4、在堆記憶體中建立物件的特有屬性。並進行預設初始化。

5、對屬性進行顯示初始化。

6、對物件進行構造**塊初始化。

7、對物件進行對應建構函式初始化

8、將記憶體位址賦給棧記憶體中的物件名變數。

物件導向6

1.stringbuffer 執行緒安全的 1.概述 執行緒安全的可變序列 2.構造 3.方法 public class stringbuffertext3 可以把任意型別資料新增到字串緩衝區裡面,並返回字串緩衝區本身public class inserttext 在指定位置把任意型別的資料插入到字...

物件導向 (6)繼承

物件的繼承代表了一種 is a 的關係,如果兩個物件a和b,可以描述為 b是a 則表明b繼承a。比如 蘋果是水果,即蘋果繼承水果。實際上,繼承者還可以理解為是對被繼承者的特殊化,因為它除了具備被繼承者的特性外,還具備自己獨特的個性。就像蘋果,除了具有水果的一般特性外,它還有多種維生素 礦物質 醣類 ...

java物件導向6

介面 inet ce 當乙個抽象類中的方法都是抽象的時候,這時可以將該抽象類用 介面 inte ce來代替。格式 inte ce 介面中的成員修飾符是固定的 只能有這個兩種元素 成員變數 public static final 成員函式 public abstract 介面的出現將 多繼承 通過另一...