1
適用人群
java程序員、想提高自己的碼農、我自己、面試的java程序員
吐槽
哈哈,項目已經上線,短期我又可以休息下,趕緊複習下static
一說static肯定很多人說,這麼簡單剛畢業的都非常清楚啊。
可現實情況,我問了幾個15K的程序員,幾個場景結果他們還真不清楚。
知道怎麼用,但理解不深入
Java編程思想裡的解釋
總結
- 方便在沒有創建對象的情況下來進行調用(方法/變量)
- 類被加載了,就可以通過類名去進行訪問static修飾的方法、變量
- 可以編寫static代碼塊來優化程序性能(優點)
例子
都說static理解很簡單的程序員朋友看看下面的例子吧
案例一
執行結果:
有些程序員朋友可能奇怪,main裡面什麼都沒有,怎麼也打印了
原因是執行main方法之前,必須先加載TestStatic類
如果把 new TestStatic(); 註釋放開運行結果是這樣的
案例二
這個案例如果你很清楚初始化順序,肯定基礎非常紮實
運行結果
我把main位置移動到Son類,輸出結果是一樣的
這個執行過程比較複雜,一個一個分析下
具體執行過程
- 1. main運行先加載Father類【Father static】,
- 2. new Son()然後會去加載Son類【Son static】,
- 3. Son的父類Father已經加載過了,
- 4. 然後調用構造器Son(),會先初始化父類Father成員變量,Person類初次加載【Person static】,
然後執行構造器的【Person 程序汪汪】
- 5.父類【Father 構造器】
- 6.【Son 構造器】
對象的初始化過程優先級
- 靜態成員變量>靜態方法>普通成員變量>構造器 【記住規律】
- 父類>子類 【父類的優先子類加載,靜態、普通都一樣】
- 成員變量>構造器【這個順序記住吧】
案例三
內存簡單分析
內存圖
age前加個static,其他都不變
輸出結果
原因
看圖,age從原來的堆變到了靜態存儲去
java編程思想
閱讀更多 程序汪汪 的文章