1. 程式人生 > >Java面向物件知識點總結

Java面向物件知識點總結

一、類和物件

(1)類:類是模子,確定物件將會擁有的特徵(屬性)和行為(方法)。

類的特點:類是具有相同屬性和方法的一組物件的集合。

(2)物件

建立物件:類名 物件名 = new 類名()

使用物件:物件.屬性   /   物件.方法名()

(3)成員變數與區域性變數

成員變數:在類中定義,用來描述物件將要有什麼。(作用域在整個類內部都是可見的)

區域性變數:在類的方法中定義,在方法中臨時儲存資料。(作用域僅限於定義它的方法)

區別:

①作用域不用

②兩類變數同名時,區域性變數的優先順序更高

③初始值不同:Java會給成員變數一個初始值,不會給區域性變數賦予初始值

(4)構造方法:定義在Java中的一個用來初始化物件的方法。

①使用new+構造方法 建立一個新的物件。

②名稱與類名相同且沒有返回值。

③當沒有指定構造方法時,系統會自動新增無參的構造方法。

④當有指定構造方法時,無論是有參、無參的構造方法,都不會自動新增無參的構造方法。

⑤構造方法可過載:方法名相同,但引數不同,呼叫時會自動根據不同的引數選擇相應的方法。

⑥構造方法不但可以給物件的屬性賦值,還可以保證給物件的屬性賦一個合理的值(在建構函式中增加判斷)。

(5)static靜態變數(也稱類成員)

①它屬於整個類所有,而不是某個物件所有,被類的所有物件所共享。

②靜態成員可使用類名直接訪問,也可以使用物件名進行訪問。

③靜態成員屬於整個類,當系統第一次使用該類時,就會為其分配記憶體空間直到該類被解除安裝才會進行資源回收。

(6)static靜態方法(也稱類方法)

①靜態方法中可以直接呼叫同類中的靜態成員,但不能直接呼叫非靜態成員。

②如果系統在靜態方法中呼叫非靜態變數,可通過建立類的物件,然後通過物件來訪問非靜態變數。

③在普通成員方法中,則可以直接訪問同類的非靜態變數和靜態變數。

④靜態方法中不能直接呼叫非靜態方法,需要通過物件來訪問非靜態方法。

(7)初始化塊

①普通初始化塊

{

xxx = xxx;

}

②靜態初始化塊

static {

xxx = xxx;

}

③執行順序:靜態初始化塊最先被執行-->普通初始化塊-->構造方法

二、封裝

(1)概念:將類的某些資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類提供的方法類實現對隱藏資訊的操作和訪問。

(2)好處:只能同規定的方法訪問資料,隱藏類的實現細節,方便修改和實現。

(3)實現步驟

① 修改屬性的可見性:設為private

② 建立getter/setter方法:用於屬性的讀寫

③ 在getter/setter方法中加入屬性控制語句:對屬性值的合法性進行判斷

(4)Java中的包

①作用:管理Java檔案,解決同名檔案的衝突

②必須放在Java源程式的第一行,包名間用"."號隔開

③包的使用:可以通過import關鍵字在某個檔案中使用其它檔案中的類,Java包的命名是全小寫字母

(5)Java中的訪問修飾符:可以修飾屬性和方法的訪問範圍

①private:只能在本類中訪問和使用。

②預設:能在本類和同包中訪問和使用。

③protected:能在本類、同包、子類中使用。

④public:在本類、同包、子類、其它類中使用。

(6)Java中this關鍵字

代表當前物件

this.屬性:操作當前物件的屬性

this.方法:呼叫當前物件的方法

(7)內部類:定義在另外一個類裡面的類。

作用:

①內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。

②內部類的方法可以直接訪問外部類的所有資料,包括私有的資料。

③內部類所實現的功能使用外部類同樣可以實現,只是有時候使用內部類更方便。

分類:成員內部類,靜態內部類,方法內部類,匿名內部類。

(8)成員內部類(也稱普通內部類)

①內部類定義在外部類內部,相當於外部類的一個成員變數的位置,內部類可以使用任意訪問控制符。

②內部類中的方法可以直接訪問外部類中的資料,而不受訪問控制符的影響。

定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去new一個內部類物件。

即: 內部類 物件名 = 外部類物件.new 內部類()

④外部類不能直接使用內部類的成員和方法,建立內部類的物件,然後通過內部類的物件來訪問其成員變數和方法。

⑤如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法,如果要訪問外部類的成員變數,可使用:外部類.this.物件名

(9)靜態內部類(static修飾的內部類)

①靜態內部類不能直接訪問外部類的非靜態成員,但可通過"new 外部類().成員"的方式訪問

②如果外部類的靜態成員與內部類的成員名稱相同,可通過"類名.靜態成員"訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過"成員名" 直接呼叫。

③建立靜態內部類的物件時,不需要外部類的物件,可以直接建立:內部類 物件名 = new 內部類();

(10)方法內部類

方法內部類就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法內可以使用。

注意:由於方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用訪問控制修飾符和static修飾符。

三、繼承

(1)繼承時類與類的一種關係,是一種"is a"的關係

(2)Java中的繼承時單繼承,只有一個父類

(3)class 子類 extends 父類

(4)方法的重寫

① 子類可重寫從父類繼承的方法,當呼叫方法時會優先呼叫子類的方法。

② 返回值型別、方法名、引數型別及個數 都要與父類繼承的方法相同,才叫方法的重寫。

(5)繼承的初始化順序

① 初始化父類再初始化子類

② 屬性的初始化在構造方法之前執行。

③ 父類的屬性初始化-->父類的建構函式-->子類的屬性初始化-->子類的建構函式

(6)final

① 可修飾類、方法、屬性和變數

② final修飾類,則該類不允許被繼承

③ final修飾方法,則該方法不允許被覆蓋(重寫)

④ final修飾屬性,則該類的屬性不會進行隱式初始化(類的初始化屬性必須有值)或在構造方法中賦值(只能任選其一)

⑤ final修飾變數,則該變數的值只能賦一次值,即變為常量

(7)super關鍵字

在物件的內部使用,可以代表父類

(8)Object類是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另一個類,那麼這個類預設繼承Object類。

四、多型

繼承是多型實現的基礎。

(1)引用多型:父類的引用可以指向本類的物件/父類的引用可以指向子類的物件。

(2)方法多型:建立本類物件時,呼叫的方法為本類方法/建立子類物件時,呼叫的方法為子類重寫的方法或繼承的方法。

(3)引用型別轉換

① 向上型別轉換:隱式/自動型別轉換,小型別到大型別的轉換。(無風險)

② 向下型別轉換:強制型別轉換,是大型別到小型別。(有風險)

(4)抽象類

①應用場景:在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確知道這些子類如何實現這些方法。

②從多個具有相同特徵的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性。

限制規定子類必須實現某些方法,但不關注實現細節。

④ abstract定義抽象類

⑤abstract定義抽象方法,只有宣告,不需要實現

⑥包含抽象方法的類是抽象類

⑦抽象類中可以包含普通的方法,也可以沒有抽象方法

⑧抽象類不能直接建立,可以定義引用變數

(5)介面

① 介面可以理解為一種特殊的類,由全域性常量和公共的抽象方法所組成。

② 類是一種具體實現體,而介面定義了某一批類所需要遵守的規範,介面不關心這些類的內部資料,也不關心這些類裡方法的實現細節,它只規定這些類裡必須提供某些方法。

介面定義的基本語法:

[修飾符] interface 介面名 [extends 父介面1, 父介面2]

{

零個到多個常量定義...

零個到多個抽象方法的定義....

④Java中一個類只能有一個父類,不夠靈活,可通過實現多個介面增加靈活性。

⑤介面中屬性是常量,即使定義時不新增public static final修飾符,系統也會自動加上。

⑥介面中方法只能是抽象方法,系統會自動新增public abstract

(6)UML

①概念:統一建模語言或標準建模語言,支援模型化和軟體系統開發的圖形化語言,為軟體開發的所有階段提供模型化和視覺化支援。

②常用的UML圖

用例圖:能夠以視覺化的方式,表達系統如何滿足所收集的業務規則,以及特定的使用者需求資訊。

序列圖:用於安置交互發生的一系列順序,顯示物件之間的這些互動。

類圖:UML類圖、業務邏輯和所有支援結構被用於定義全部的程式碼結構。