💡涉及的知識點速通
- 🛫 關于關鍵字你都知道什么?
- 🪂 this和super關鍵字
- 🪂 instanceof關鍵字
- 🪂 static關鍵字
- 🪂 final關鍵字
- 🛫 權限修飾符的作用范圍知多少?
??各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺
🛫 關于關鍵字你都知道什么?
🪂 this和super關鍵字
屬性和方法的調用
??this.屬性或方法名調用當前對象中的屬性或方法,如果本類中沒有超類中有的話就調用超類中的,都沒有的話就報錯。super.屬性或方法名只訪問超類中的屬性或方法,即使超類沒有子類中有的話也會報錯構造器的調用:
??構造器的調用講究比較大,首先構造器的調用使用的是this(參數列表)或者super(參數列表)。當子類繼承超類并使用構造器進行初始化的時候,子類每一個構造器的第一行會有一行默認的隱式語句super();調用超類的無參構造器,且超類的無參構造器會先于子類構造器執行??前面說過如果超類中只定義了一個有參構造器的話,就不會提供超類的默認無參構造器,如果此時子類再定義構造器的話構造器會默認調用超類的無參構造器,這就會產生報錯。解決方案就是超類定義無參構造器,或者在子類的構造器中顯式使用Super(參數列表)調用超類的有參構造器
this(參數列表)調用的是本類的構造器,super(參數列表)調用的是超類的構造器
🪂 instanceof關鍵字
??a instanceof A用來判斷某個實例變量a是否屬于A這個類的類型,如果是的話就返回true否則返回false。instanceof 關鍵字的使用場景就是,在進行向下轉型之前判斷一下左邊的對象是不是右邊的子類,如果是的話才能進行類型強轉,否則會出現ClassCastException異常。值得注意的是,如果 a instanceof A 返回true的話,A的父類放在右邊也會返回true,但是A的子類放在右邊不一定返回true。
🪂 static關鍵字
靜態變量
??使用static修飾的變量又稱為是靜態變量或者類變量,靜態變量的特點是通過該類創建的所有對象共享一個變量,一個對象修改靜態變量的值會造成其他所有對象對該靜態變量的引用值發生改變;而不使用static修飾的實例變量的特征是,每個對象之間的變量修改互不影響。
靜態方法
??靜態非靜態之間的相互調用: 使用static修飾的方法又稱為是靜態方法,靜態方法和靜態變量的使用有很大的相似之處,值得注意的是,靜態方法中無法調用該類的非靜態方法和屬性,而非靜態方法可以調用靜態和非靜態的方法和屬性。??靜態方法內部無法使用的關鍵字: 值得注意的是,靜態方法內部無法使用this和super關鍵字,因為this和super都是對對象屬性或方法的引用,static是隨著類的加載而加載,也就是說static的加載是在對象之前的,static加載的時候還沒有對象的存在,所以說此時調用會產生邏輯錯誤導致報錯
??靜態方法無法被重寫覆蓋: 此外比較重要的就是,static修飾的方法不能被重寫覆蓋,也就是說子類和超類中滿足重寫條件的static方法不會導致重寫覆蓋,使用多態調用的還是超類中的方法,與此同時private修飾的方法封裝在超類中也無法被重寫
??靜態方法調用: 還有就是,我們都知道static修飾的方法可以使用類名直接調用,但是并不是所有的靜態屬性都可以直接使用類名進行調用,因為如果靜態屬性被private修飾的話就無法使用類名調用,所以說“靜態屬性可以直接用類名調用”這句話是不正確的,應該是“非私有的靜態屬性可以直接用類名調用”
🪂 final關鍵字
??修飾類:使用final修飾的類無法被其他類所繼承,也就說該類不能擁有子類,比如String、System等類
??修飾方法:使用final修飾的方法無法被重寫
??修飾變量:使用final修飾的“變量”的值無法修改,也就是一個常量,常量的初始化方式可以是顯示初始化,代碼塊初始化,構造器初始化
??修飾局部變量:可以在方法體中使用final修飾一個局部“變量”,或者方法的參數使用final修飾,無論是哪一種,該局部“變量”的值都無法進行修改
🛫 權限修飾符的作用范圍知多少?
??Java中一共定義了四種權限修飾符,它們按照作用范圍從小到大依次是:private、缺省(default)、protected、public,其中缺省的意思就是在不使用權限修飾符的情況下就默認使用該修飾符。這四種權限修飾符可用來修飾屬性、方法、構造器、內部類等結構,但是類只能使用缺省和public修飾
??這里我以屬性的調用為例,方法的效果與之相同,接下來就使用代碼測試上圖結論方便大家的理解。首先是屬性定義的本類內部屬性定義所在類的所在package下的所有類中
屬性定義所在類的不同package有繼承關系的子類
屬性定義所在類的不同package的普通類