JAVA基礎 面向物件(四) 程式碼塊 static 抽象類 內部類
一、static 關鍵字引入
static關鍵字宣告的屬性和方法是類自己的,所有類例項化的物件,都共享這些static屬性和方法。
static可用於修飾:屬性、方法、程式碼塊、內部類
1.1 static修飾屬性
static修飾後的屬性稱為靜態屬性,也叫靜態變數,類變數。類的所有物件共享同一靜態變數,當通過某一個物件修改靜態變數時,會導致其他物件呼叫此靜態變數時,是修改過的。可以想象成大學宿舍,每個宿舍裡面的房間都是物件,個人是個人的,宿舍公共區的東西比如澡堂,廚房就是共有的,static變數
1.2 static靜態變數的說明
1、靜態變數隨著類載入而載入,因此靜態變數的載入要早於物件的建立。
2、由於類只會載入一次,因此靜態變數在記憶體中也會只有一份:存在方法區的靜態域中。
說明:類是不會被銷燬的,除非記憶體嚴重不足,因此類變數(靜態變數)會被一直儲存(即資料不會被重置)。
1.3 static靜態變數的呼叫方法
靜態變數由於是類變數,因此可以直接用類來呼叫,不需要用類的物件呼叫了(也可以用物件呼叫)
語法: 類名.靜態變數 = 值; //可以直接通過類給類靜態變數賦值(通過類來呼叫)
類物件名1.靜態變數 = 值; //通過類物件來呼叫(注意需要public許可權)
exp: Math.PI ,System.out(類的屬性也可以是引用資料型別,out屬性就是system類的一個引用資料型別的屬性)
class System{
public static finalPrintStream out; //屬性名為out,屬性值為out.toString()
}
因此可以用out物件呼叫 PrintStream類的println方法,就形成了System.out.println();
1.4 static靜態變數的記憶體解析
1.5 靜態方法
1、特點
(1)靜態方法隨著類的載入而載入,同樣可以直接通過 類.方法名 來呼叫靜態方法
(2)同樣可以通過類的物件來調靜態方法。
(3)靜態方法,只能呼叫靜態方法或屬性(因為他們宣告週期一致,重點是,非靜態方法或屬性都是物件的,根本不知道物件啥時候會銷燬,而且那麼多物件,你呼叫誰的)。非靜態方法,既可以呼叫非靜態屬性或方法,也可以呼叫靜態方法或屬性。(就是說物件可以呼叫類的東西)
注意:靜態方法內,不能使用this關鍵字、super關鍵字(根本沒物件)。直接類名.屬性,或類名.方法
1.6 static屬性和方法的應用場景 (一般情況)
1、static屬性應用場景
(1)如果這個屬性可以被多個物件所共享,就可以宣告成static。比如銀行賬戶類,賬號,密碼,餘額,透支額度,利率。顯然利率可以宣告為static屬性
(2)類中的常量(final修飾的變數),一般也用static修飾,比如Math.PI。 既然是常量,自然這個類的所有物件都是用一個相同的值。那就static成類屬性多好。要不每個物件都來生成一個相同值,麻煩。
2、static方法應用場景
(1)操作靜態屬性的方法,一般就設定成靜態了,就是直接用類呼叫方法來設定靜態屬性,沒必要造個物件去調方法。
(2)工具類中的方法,一般宣告為靜態。因為工具類沒屬性,還要造個物件去調方法,太麻煩了,直接用類調方法更方便。