Java基礎 物件導向(一)封裝

2021-09-07 08:10:15 字數 2817 閱讀 4885

一、什麼是物件導向?怎麼理解物件導向?

1.物件導向的三個特點:

a) 物件導向就是一種常見的思想,符合人們的思考習慣。

b) 物件導向的出現,將複雜的問題簡單化。

c) 物件導向的出現,讓程靜在過程中的執行者,變成了物件中的指揮者。

2.類和物件的區別

類:明確該事物的屬性和行為並定義在其中。

物件:其實就是該類事務實實在在純在的個體——>new出來的

總的來說,類與物件之間的關係:

類就是事物的描述,物件是該類事物的例項

3.成員變數和區域性變數的區別:

成員變數<–>屬性, 成員函式<–>行為

a)成員變數定義在類中,正各類眾都可以訪問;

區域性變數定義在函式,語句,區域性**塊中,只在所屬的區域有效。

b)成員變數存在於堆記憶體的物件中;

區域性變數存在於棧記憶體的方法中。

c)成員變數隨著物件的建立而存在,隨著物件的消失而消失;

區域性變數隨著所屬區域的執行而存在, 隨著所屬區域的結束而釋放。

d)成員變數都有預設初始化值;

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

4.匿名物件

new person().方法/變數

用途:a) 當物件對方法僅進行一次呼叫的時候,就可以簡化成匿名物件

b) 匿名物件可以作為實際引數進行傳遞

二、封裝

1.概念:

是指隱藏物件的屬性和實現細節,僅對外提供公共的訪問方式。

故事:多**教室有電腦,大家上課進門呢就可以使用(普通修飾符下的類中全域性變數)。但是老師覺得不安全,誰都可以進來,電腦不丟了麼?!那老師就想了乙個辦法,把門拆了換成牆(全部變成private)。。。哎!電腦丟不了了,但是同學們進不去了(訪問不了用不上了)。因此老師改進了一下,不拆牆,給門加把鎖(屬性方法),這樣目的就達到了(封裝也就誕生了)。

2.好處:

a) 安全性提高

b) 便於使用

c) 提高重用性

d) 將變化隔離

3.原則

將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問。

三、this關鍵字

1.概念

this:代表物件。代表哪個物件呢?當前物件。而this就是所在函式所屬物件的引用。

簡單說:哪個物件呼叫了this所在的函式,this就代表哪個物件。

2.應用場景

a) 當區域性變數名與成員變數重名,可以用關鍵字this來區分

b) this(name),其中name是string變數,該表示式用來表示呼叫含有引數string的建構函式,注意要放在另外建構函式的第一句。

四、static關鍵字

1.用途:

用於修飾成員(成員變數和陳冠函式)

2.特點:

隨著類的載入而載入;

優先於物件存在;

被所有物件所共享;

多了一種呼叫方式,可以直接被類名呼叫——> 類名.靜態成員

注意事項:

靜態方法只能訪問靜態成員

靜態方法中不可以寫this,super等關鍵字

主函式main(string args)是靜態的

3.成員變數和靜態變數的區別?

a) 兩個變數的生命週期不同。

成員變數隨著物件的建立而存在,隨著物件的被**而釋放;

靜態變數隨著類的載入而存在,隨著類的消失而消失。

b) 呼叫方式不同。

成員變數只能被物件呼叫。

靜態變數可以被物件呼叫,還可以被類名呼叫。

c) 別名不通。

成員變數 也成為例項變數。

靜態變數 也成為類變數。

d) 資料儲存位置不同。

成員變數資料儲存在堆記憶體的物件中,所以也叫物件的特有資料。

靜態變數資料儲存在方法區(共享資料區)的靜態區當中,所以也叫物件的共享資料。

4.靜態什麼時候用?

aa) 靜態變數:

當分析物件中所具備的成員變數的值都是相同的—>>>這時這個成員就可以被靜態修飾。

只要這個資料在物件中都是不同的,就是物件的特有資料,必須儲存在物件中,是非靜態的。

如果是相同的資料,物件不需要做修改,只需要使用即可,不需要儲存在物件中

bb) 靜態函式:

函式是否用靜態修飾,就參考一點,就是該函式功能是否有訪問到物件中的特有資料。

簡單點說,從源**看,該功能是否需要訪問非靜態的成員變數,如果需要,該功能就是非靜態的。

如果不需要,就可以將該功能定義成靜態的。

當然,也可以定義成非靜態,但是非靜態需要被物件呼叫,而僅建立物件呼叫非靜態的

沒有訪問特有資料的方法,該物件的建立時沒有意義的。

5.靜態**塊

aa) 啥是靜態**塊?

//靜態**塊》沒有名字的static修飾符修飾的**塊

static

bb) 特點

不需要呼叫,生成類自動執行;

只執行一次

cc) 作用

用於給類進行初始化,因為不是所有類都會建立物件,不一定建立建構函式

6.構造**塊

aa) 啥是構造**塊?

class person

}bb) 特點

前面啥也沒有,就一對兒大括號

構造物件時觸發,可以給所有物件進行初始化的。

與建構函式的區別:建構函式是給對應的物件進行針對性的初始化

而構造**塊具有通用性。

cc) 與靜態**塊的區別:

靜態**塊:最先執行,呼叫類就觸發且只觸發一次

構造**塊:跟著執行,但早於建構函式。有物件才執行,有幾個物件執行幾次。

js物件導向程式設計一 封裝

js是物件導向程式設計的語言,既是它的函式,陣列,屬性都是物件,可以設定物件的屬性和方法。一.生成物件的原始模式 假定把貓看成乙個物件,它有name和color兩個屬性.var cat 現在,我們需要根據這個原型物件的規格,生成兩個例項物件.var cat1 建立乙個空物件 cat1.name 大毛...

一 封裝(C物件導向開發)

內容參考於 抽象接 術和元件開發規範及其思想 在c語言中,可以使用乙個c檔案 c 檔案 和 件完 h 檔案 成 類 的定義,將所有需要封裝的東西都存於c 檔案中,h 檔案中只展現那些對外可見 無需封裝 重點 的內容。1.示例1 乙個棧物件的例子。stack.h ifndef stack h defi...

java物件導向特徵之一 封裝與隱藏

使用者對類內部定義的屬性 物件的成員變數 的直接操作會導致資料錯誤,混亂或安全性問題。解決方法 將類的屬性保護起來,防止亂用。保護的方式 資訊隱藏 當建立了類的物件以後,如果直接通過 物件.屬性 的方式對相對應的物件屬性賦值的話,可能會出現於實際情況相違背的意外,故,不考慮讓物件來直接作用於屬性,而...