類變量,類方法
【類變量】
-
介紹
類變量(又叫靜態變量)是該類的所有對象共享的變量,任何一個該類的對象去訪問它時,取到的都是相同的值,同樣任何一個該類的對象去修改它時,修改的也是同一個變量。
定義類變量:訪問修飾符 static 數據類型 變量名;
-
內變量內部布局
jdk8以及以前,放在靜態域;jdk8以后放在堆中(class對象),當你的類加載的時候會在堆生成一個類的class對象) -
要記住的是
(1)static變量是同一個類所有對象共享的
(2)static類變量,在類加載的時候就生成了(即類加載的時候就會初始化類變量)
(3)類變量的生命周期是隨類的加載開始,隨着類的消亡而銷毀。 -
類變量的訪問
可以通過類名.類變量名
或者對象名.類變量名
來訪問,但Java設計者推薦我們使用類名.類變量名
的方式來訪問。
【類方法】
-
介紹
類變量也叫靜態變量。
定義格式如下:訪問修飾符 static 數據返回類型 方法名(){}
-
類方法經典的使用場景
(1)當方法中不涉及到任何和對象相關的成員,則可以將方法設計成靜態方法,提高開發效率。
(2)比如工具類中的方法 utils
Math類、Arrays類、Collections集合類
(3)在實際開發中,往往將一些通用的方法,設計成靜態方法,這樣我們不需要創建對象就可以使用,比如打印一維數組,冒泡排序等等 -
類方法與普通方法
(1)類方法和普通方法都是隨着類的加載而加載,將結構信息存儲在方法區:類方法中無this的參數,普通方法中隱含着this的參數。
(2)類方法可以通過類名或對象名調用,而普通方法只能通過對象名調用。
(3)類方法中不允許使用和對象有關的關鍵字,比如this和super。普通方法可以。(因為當用類名.類方法名
調用的時候,this和super指示不明)
(4)類方法中,只能訪問 靜態變量 或 靜態方法;而普通方法既可以訪問普通變量(方法),也可以訪問靜態的。 -
Java中static靜態方法可以繼承嗎?可以被重寫嗎?
1,可以被繼承,但是不能被重寫,如果父子類靜態方法名相同,則會隱藏derive類方法(調用base類的方法)
2.靜態方法是編譯時綁定的,方法重寫是運行時綁定的。
static修飾的方法不能能被重寫
靜態非靜態的訪問等等,一句話本質就是創建時間問題(類的class對象先於這個類的對象)