一、static關鍵字
概念: static是靜態(tài)的意思,可以修飾成員變量和成員方法。當修飾成員變量時,在內存中只存儲一份,可以被共享訪問、修改。當修飾成員方法時,可以被共享訪問,也被稱為公共方法。
-
靜態(tài)成員變量
訪問格式: 【類名.靜態(tài)成員變量】或【對象名.靜態(tài)成員變量】
作用: 主要用于共享數(shù)據(jù)的存儲,例如在線人數(shù)場景。
內存原理:
main方法加載時,若遇到static修飾的變量,則同步在堆內存中開辟類靜態(tài)數(shù)據(jù)區(qū)并存儲變量值;若當前類中沒有靜態(tài)變量,則在加載類時,同步開辟類靜態(tài)數(shù)據(jù)空間。
開辟完成后,類靜態(tài)變量空間隨程序的結束而回收。 -
靜態(tài)成員方法
訪問格式: 【類名.靜態(tài)成員方法()】或【對象名.靜態(tài)成員方法()】
作用: 主要用于公共方法的調用,當不需要調用實例成員變量時,調用靜態(tài)方法。
內存原理: 與靜態(tài)成員變量相同,區(qū)別是靜態(tài)方法存儲在方法區(qū)中。
使用注意事項
1、 靜態(tài)方法只能訪問靜態(tài)成員,不能直接訪問實例成員。(因為靜態(tài)修飾的成員會優(yōu)先加載,實例成員只有在聲明對象時才會加載,JVM會訪問不到實例成員而報錯。)
2、實例方法可以訪問靜態(tài)成員,也可以訪問實例成員。(因為靜態(tài)成員優(yōu)先于實例成員加載,實例成員同步對象創(chuàng)建,所以實例方法可以直接訪問靜態(tài)成員。)
3、靜態(tài)方法不可以出現(xiàn)this關鍵字。(因為this關鍵字代表當前對象,屬于實例成員,所以不可以出現(xiàn)。)
static關鍵字一些使用場景
-
工具類構建
概念: 工具類是指將工具方法靜態(tài)化封裝到類中,這樣開發(fā)人員就能直接使用工具類協(xié)助開發(fā)或用戶功能模塊的拼裝。
注意: 為提高工具類的健壯性,建議將構造器私有化。 -
代碼塊
(1)靜態(tài)代碼塊:
格式: 【static{ … }】
特點: 通過static關鍵字修飾,隨類的加載而加載,自動觸發(fā)并只執(zhí)行一次。
作用場景: 類加載時的靜態(tài)數(shù)據(jù)初始化。
(2)構造代碼塊
格式: 【{ … }】
特點: 構造器調用時優(yōu)先執(zhí)行的代碼。
作用場景: 初始化實例資源。 -
單例設計模式
設計模式的概念: 設計模式是一系列解決方案中最優(yōu)的解決方案,20多種設計模式對應20多種不同的軟件開發(fā)中所遇到的問題。
單例模式的概念: 單例模式是指一個類只產(chǎn)生一個對象進行使用。
單例模式(1)設計步驟:
1、定義一個類,把構造器私有化。
2、定義一個靜態(tài)變量存儲對象。
/*單例類*/
public class SingleInstance{
/*單例靜態(tài)對象*/
public static SingleInstance instance = new SingleInstance();
/*單例私有化構造器*/
private SingleInstance(){}
}
單例模式(2)設計步驟
1、定義一個類,把構造器私有化。
2、定義一個靜態(tài)變量存儲對象并私有化。
3、提供獲取單例對象的方法。
/*單例類*/
public class SingleInstance{
/*單例私有化靜態(tài)對象*/
private static SingleInstance instance;
/*單例私有化構造器*/
private SingleInstance(){}
/*單例對象獲取*/
public static SingleInstance getInstance(){
if(instance == null){
instance = new SingleInstace();
}
return instance;
}
}
Java面向對象特性(2):繼承
-
extends關鍵字: 這是Java提供的用于類與類之間建立父子關系的關鍵字。
-
使用格式: 【public class Student extends People { }】
-
類與類之間的關系: Student稱為子類(或派生類),People稱為父類(或基類或超類)。
-
作用: 當子類繼承父類后,可以直接使用父類公共屬性和方法。
-
使用繼承的原因: 繼承特性可以提高代碼復用。
-
繼承的設計規(guī)范: 子類的共性成員在父類中定義,獨有成員在子類中定義。(如果父類提供原始基因,子類可能產(chǎn)生基因變異。)
-
繼承的特點
- 子類能直接繼承并訪問父類公開成員(靜態(tài)成員屬于共享數(shù)據(jù)),但不能繼承構造器。
- Java僅支持單繼承,一個類只能繼承一個父類,但支持多層繼承,即有子孫后代類。
- Object類是Java所有類的父類。
-
內存機制
當程序開始加載子類對象時,會在堆內存中開辟包含父類和子類的空間,當使用時子類調用父類方法時,是在同一塊內存中的父類空間查找方法。 -
繼承后的特性
子類訪問成員原則: 就近原則
1、子類局部范圍找
2、從子類成員找
3、后從父類成員找
4、找不到就報警
注意: 如果子類中出現(xiàn)重名成員,則優(yōu)先使用子類。 -
super、this關鍵字
1、super:是指代父類對象。
2、this:是指代當前對象。 -
繼承時的構造器創(chuàng)建過程
1、默認調用父類無參構造器,調用語句是【super();】,若想要調用父類的有參構造器,調用語句是【super(…);】。(因為繼承原因,優(yōu)先開辟父類空間才能讓子類獲取父類成員)
2、調用子類構造器。 -
方法重寫
概念: 當子類出現(xiàn)父類相同的方法名時,則子類方法被稱為重寫的方法。
使用場景: 當子類需要父類方法,但父類方法不滿足子類需求,則子類重寫父類方法。 -
@Override注解
概念: 用于重寫校驗方法
作用: 提高程序可讀性文章來源:http://www.zghlxwxcb.cn/news/detail-454249.html -
重寫方法的注意事項與要求:
1、重寫方法的名稱、形參列表必須與模板方法一致(除了代碼塊,都不變)。
2、私有方法不能重寫。
3、子類重寫父類方法時,訪問權限必須大于或等于父類(權限自低到高:private<protected<public)
4、子類不能重寫父類靜態(tài)方法,否則報錯。(共享方法并不與子類方法不沖突)文章來源地址http://www.zghlxwxcb.cn/news/detail-454249.html
到了這里,關于Java學習路線(8)——面向對象基礎(2)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!