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類圖、業務邏輯和所有支援結構被用於定義全部的程式碼結構。