面向對象高級第一天
static關鍵字
是靜態(tài)的意思,可以修飾成員變量,也可以修飾成員方法
成員變量的分類
-
靜態(tài)成員變量
-
有static修飾,屬于類,與類一起加載,內存中只有一份,可以被共享訪問。
-
什么時候用呢?如果信息要被共享,只需要一份就用靜態(tài)成員變量,比如:系統(tǒng)在線人數(shù)。
-
訪問規(guī)則:
建議用類名訪問:類名.靜態(tài)成員變量
同一個類中,訪問靜態(tài)成員可以省略類名不寫。
理論上也可以這樣訪問:對象名.靜態(tài)成員變量(不推薦)
-
-
實例成員變量
-
無static修飾,屬于對象,每個對象中都存在一份實例成員變量。比如:name age
-
什么時候用呢?比如:name age,每個對象中都有這些信息,而且信息還不同時,定義成實例成員變量。
-
訪問規(guī)則:
-
? ? ? ? ? ? ? ? ? ? 只能用:對象名.實例成員變量。
成員方法的分類
-
靜態(tài)成員方法
-
有static修飾,屬于類,與類一起加載,可以被共享訪問。
-
什么時候用呢?如果是做一個通用功能,可以用靜態(tài)成員方法。
-
訪問規(guī)則:
建議用類名訪問:類名.靜態(tài)方法
注意:同一個類中,訪問靜態(tài)成員可以省略類名不寫。
理論上也可以這樣訪問:對象名.靜態(tài)成員方法(不推薦) -
靜態(tài)成員方法的應用:工具類
是什么? 工具類中都是靜態(tài)方法,為了完成一個共用功能
好處:一次編寫,處處可調,提高代碼的復用性,提高開發(fā)的效率。
注意:建議把工具類的構造器私有化,因為工具類無需對外創(chuàng)建對象,它的方法都是靜態(tài)方法,直接用類名訪問即可。
-
-
實例成員方法
-
無static修飾,屬于對象,必須用對象觸發(fā)訪問。
-
什么時候用呢?如果這個方法屬于對象,而且要直接訪問對象的實例成員,則聲明成實例方法。
-
訪問規(guī)則:
只能用:對象名.實例成員方法。
-
static的應用知識
代碼塊
-
是什么? 類的5大成分(成員變量、成員方法、構造器、代碼塊、內部類)之一
-
分類
-
靜態(tài)代碼塊:(重點了解一下)
格式:static {}
特點:屬于類,與類一起優(yōu)先加載,自動觸發(fā)執(zhí)行一次。
作用:可以用于在程序啟動時,進行靜態(tài)資源的初始化操作 -
實例代碼塊(幾乎不用):
格式:{}
特點:屬于對象的,每次調用構造器構建對象前都會執(zhí)行一次,再執(zhí)行構造器。
作用:可以用于初始化實例資源
-
單例設計模式
-
單例是一種設計模式,是為了解決某個問題
-
單例能解決的問題:保證一個類對外只能產(chǎn)生一個對象。
-
重點在于如何實現(xiàn)單例:
-
餓漢單例
-
特點:拿對象時,對象已經(jīng)存在
-
實現(xiàn)步驟:
/**
* 餓漢單例設計模式
*/
public class SingleInstance {
? ?// 1.定義一個類,將構造器私有
? ?private SingleInstance() {}
?
? ?// 2.對外提供一個靜態(tài)對象
? ?// 餓漢單例是在獲取對象前,就已經(jīng)準備好了一個對象
? ?// 這個對象只能通過類名訪問,所以定義成static的
? ?public static SingleInstance instance = new SingleInstance();
}
-
懶漢單例
-
特點:要拿對象的時候,才開始創(chuàng)建一個對象。
-
實現(xiàn)步驟:
/**
* 懶漢單例設計模式
*/
public class SingleInstance2 {
? ?// 2.定義一個靜態(tài)的成員變量負責存儲一個對象,只加載一次,只有一份。
? ?// 專業(yè)的做法是:這里私有化,這樣可以避免給別人挖坑
? ?private static SingleInstance2 instance2;
?
? ?// 1.將構造器私有化
? ?private SingleInstance2() {}
?
? ?// 3.對外提供一個靜態(tài)的獲取對象的方法
? ?public static SingleInstance2 getInstance2() {
? ? ? ?if (instance2 == null) {
? ? ? ? ? ?// 第一次來拿對象 :此時需要創(chuàng)建對象。
? ? ? ? ? ?instance2 = new SingleInstance2();
? ? ? }
? ? ? ?return instance2;
? }
}
-
面向對象的三大特征之二:繼承
繼承概述、使用繼承的好處
-
什么是繼承? Java允許一個類通過extends與另一個類建立父子關系,這就是繼承。
-
繼承的格式:
-
子類 extends 父類
-
-
繼承的特點:
-
子類繼承父類后,就可以得到父類的屬性和行為。
-
-
繼承的核心優(yōu)點:
-
提高代碼的復用性,多個子類的相同代碼可以放在父類中,增強了類的擴展性。
-
繼承的設計規(guī)范、內存運行原理
-
設計規(guī)范:子類共用屬性和行為放在父類,子類獨有屬性和行為放在子類自己那里。
-
內存原理:
子類對象實際上是由子父類這兩張設計圖共同創(chuàng)建出來的。
繼承的特點
-
Java是單繼承模式:一個類只能繼承一個直接父類。
-
Java不支持多繼承、但是支持多層繼承。
-
Java中所有的類都是Object類的子類。
繼承后:方法重寫
-
概念:子類重寫了一個聲明與父類一樣的方法,覆蓋父類的方法。子類認為父類的該方法不好用,以后用自己重寫的方法。
-
重寫方法建議加上一個重寫校驗注解:@Override
-
作用:要求必須是正確重寫的才不報錯
-
作用2:可讀性好
-
-
重寫的要求:
-
重寫方法的名稱和形參列表必須與父類被重寫方法的名稱和形參列表一致(重點)
-
私有方法不能重寫
-
靜態(tài)方法不能重寫
-
重寫方法的權限 >= 被重寫方法的訪問權限。
-
-
在重寫的方法中如果想要訪問父類的方法怎么辦呢?
-
super.方法名();
-
繼承后:成員變量、成員方法的訪問特點
-
就近原則
-
this.子類自己的成員變量
-
在子類方法中訪問父類成員怎么辦? super.父類成員變量/父類成員方法
繼承后:子類構造器的特點
-
特點:子類的全部構造器默認都會先訪問父類的無參數(shù)構造器,再執(zhí)行自己的構造器
-
為什么呢? 先有爸爸才有兒子。 先調用父類的構造器初始化父類的數(shù)據(jù),再調用自己的構造器初始化自己的數(shù)據(jù)。
-
代碼層面:默認子類構造器的第一行都有一個super(), 訪問父類的無參數(shù)構造器,寫不寫都有
繼承后:子類構造器訪問父類有參構造器
-
調用父類有參數(shù)構造器,初始化繼承自父類的數(shù)據(jù)。
-
super(....) 根據(jù)參數(shù)調用父類構造器
this、super使用總結
-
this訪問子類當前對象的成員。
-
super:在子類方法中指定訪問父類的成員。
-
this(...) : 訪問本類兄弟構造器
-
super(...):在本類構造器中指定訪問父類的構造器文章來源:http://www.zghlxwxcb.cn/news/detail-807320.html
-
注意事項:super(...) 必須放在第一行,this(...) 也必須在第一行。因此2者不能共存一個構造器中。文章來源地址http://www.zghlxwxcb.cn/news/detail-807320.html
到了這里,關于Java面向對象進階第一天的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!