面向物件高級第一天
static關鍵字
是靜態的意思,可以修飾成員變數,也可以修飾成員方法
成員變數的分類
-
靜態成員變數
-
有static修飾,屬于類,與類一起加載,記憶體中只有一份,可以被共享訪問,
-
什么時候用呢?如果資訊要被共享,只需要一份就用靜態成員變數,比如:系統在線人數,
-
訪問規則:
建議用類名訪問:類名.靜態成員變數
同一個類中,訪問靜態成員可以省略類名不寫,
理論上也可以這樣訪問:物件名.靜態成員變數(不推薦)
-
-
實體成員變數
-
無static修飾,屬于物件,每個物件中都存在一份實體成員變數,比如:name age
-
什么時候用呢?比如:name age,每個物件中都有這些資訊,而且資訊還不同時,定義成實體成員變數,
-
訪問規則:
-
只能用:物件名.實體成員變數,
成員方法的分類
-
靜態成員方法
-
有static修飾,屬于類,與類一起加載,可以被共享訪問,
-
什么時候用呢?如果是做一個通用功能,可以用靜態成員方法,
-
訪問規則:
建議用類名訪問:類名.靜態方法
注意:同一個類中,訪問靜態成員可以省略類名不寫,
理論上也可以這樣訪問:物件名.靜態成員方法(不推薦) -
靜態成員方法的應用:工具類
是什么? 工具類中都是靜態方法,為了完成一個共用功能
好處:一次撰寫,處處可調,提高代碼的復用性,提高開發的效率,
注意:建議把工具類的構造器私有化,因為工具類無需對外創建物件,它的方法都是靜態方法,直接用類名訪問即可,
-
-
實體成員方法
-
無static修飾,屬于物件,必須用物件觸發訪問,
-
什么時候用呢?如果這個方法屬于物件,而且要直接訪問物件的實體成員,則宣告成實體方法,
-
訪問規則:
只能用:物件名.實體成員方法,
-
static的應用知識
代碼塊
-
是什么? 類的5大成分(成員變數、成員方法、構造器、代碼塊、內部類)之一
-
分類
-
靜態代碼塊:(重點了解一下)
格式:static {}
特點:屬于類,與類一起優先加載,自動觸發執行一次,
作用:可以用于在程式啟動時,進行靜態資源的初始化操作 -
實體代碼塊(幾乎不用):
格式:{}
特點:屬于物件的,每次呼叫構造器構建物件前都會執行一次,再執行構造器,
作用:可以用于初始化實體資源
-
單例設計模式
-
單例是一種設計模式,是為了解決某個問題
-
單例能解決的問題:保證一個類對外只能產生一個物件,
-
重點在于如何實作單例:
-
餓漢單例
-
特點:拿物件時,物件已經存在
-
實作步驟:
/**
* 餓漢單例設計模式
*/
public class SingleInstance {
// 1.定義一個類,將構造器私有
private SingleInstance() {}
?
// 2.對外提供一個靜態物件
// 餓漢單例是在獲取物件前,就已經準備好了一個物件
// 這個物件只能通過類名訪問,所以定義成static的
public static SingleInstance instance = new SingleInstance();
}
-
懶漢單例
-
特點:要拿物件的時候,才開始創建一個物件,
-
實作步驟:
/**
* 懶漢單例設計模式
*/
public class SingleInstance2 {
// 2.定義一個靜態的成員變數負責存盤一個物件,只加載一次,只有一份,
// 專業的做法是:這里私有化,這樣可以避免給別人挖坑
private static SingleInstance2 instance2;
?
// 1.將構造器私有化
private SingleInstance2() {}
?
// 3.對外提供一個靜態的獲取物件的方法
public static SingleInstance2 getInstance2() {
if (instance2 == null) {
// 第一次來拿物件 :此時需要創建物件,
instance2 = new SingleInstance2();
}
return instance2;
}
}
-
面向物件的三大特征之二:繼承
繼承概述、使用繼承的好處
-
什么是繼承? Java允許一個類通過extends與另一個類建立父子關系,這就是繼承,
-
繼承的格式:
-
子類 extends 父類
-
-
繼承的特點:
-
子類繼承父類后,就可以得到父類的屬性和行為,
-
-
繼承的核心優點:
-
提高代碼的復用性,多個子類的相同代碼可以放在父類中,增強了類的擴展性,
-
繼承的設計規范、記憶體運行原理
-
設計規范:子類共用屬性和行為放在父類,子類獨有屬性和行為放在子類自己那里,
-
記憶體原理:
子類物件實際上是由子父類這兩張設計圖共同創建出來的,
繼承的特點
-
Java是單繼承模式:一個類只能繼承一個直接父類,
-
Java不支持多繼承、但是支持多層繼承,
-
Java中所有的類都是Object類的子類,
繼承后:方法重寫
-
概念:子類重寫了一個宣告與父類一樣的方法,覆寫父類的方法,子類認為父類的該方法不好用,以后用自己重寫的方法,
-
重寫方法建議加上一個重寫校驗注解:@Override
-
作用:要求必須是正確重寫的才不報錯
-
作用2:可讀性好
-
-
重寫的要求:
-
重寫方法的名稱和形參串列必須與父類被重寫方法的名稱和形參串列一致(重點)
-
私有方法不能重寫
-
靜態方法不能重寫
-
重寫方法的權限 >= 被重寫方法的訪問權限,
-
-
在重寫的方法中如果想要訪問父類的方法怎么辦呢?
-
super.方法名();
-
繼承后:成員變數、成員方法的訪問特點
-
就近原則
-
this.子類自己的成員變數
-
在子類方法中訪問父類成員怎么辦? super.父類成員變數/父類成員方法
繼承后:子類構造器的特點
-
特點:子類的全部構造器默認都會先訪問父類的無引數構造器,再執行自己的構造器
-
為什么呢? 先有爸爸才有兒子, 先呼叫父類的構造器初始化父類的資料,再呼叫自己的構造器初始化自己的資料,
-
代碼層面:默認子類構造器的第一行都有一個super(), 訪問父類的無引數構造器,寫不寫都有
繼承后:子類構造器訪問父類有參構造器
-
呼叫父類有引數構造器,初始化繼承自父類的資料,
-
super(....) 根據引數呼叫父類構造器
this、super使用總結
-
this訪問子類當前物件的成員,
-
super:在子類方法中指定訪問父類的成員,
-
this(...) : 訪問本類兄弟構造器
-
super(...):在本類構造器中指定訪問父類的構造器
-
注意事項:super(...) 必須放在第一行,this(...) 也必須在第一行,因此2者不能共存一個構造器中,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/545000.html
標籤:面向對象
上一篇:擁有這種抽象能力,讓你成為架構師
下一篇:一文探尋學習DDD的意義
