Java里static作用,15K的程式設計師敢說理解的很清楚嗎

1

適用人群

java程序員、想提高自己的碼農、我自己、面試的java程序員

吐槽

哈哈,項目已經上線,短期我又可以休息下,趕緊複習下static

一說static肯定很多人說,這麼簡單剛畢業的都非常清楚啊。

可現實情況,我問了幾個15K的程序員,幾個場景結果他們還真不清楚。

知道怎麼用,但理解不深入

Java編程思想裡的解釋

Java裡static作用,15K的程序員敢說理解的很清楚嗎

總結

  • 方便在沒有創建對象的情況下來進行調用(方法/變量)
  • 類被加載了,就可以通過類名去進行訪問static修飾的方法、變量
  • 可以編寫static代碼塊來優化程序性能(優點)

例子

都說static理解很簡單的程序員朋友看看下面的例子吧

案例一

Java裡static作用,15K的程序員敢說理解的很清楚嗎

Java裡static作用,15K的程序員敢說理解的很清楚嗎

執行結果:

有些程序員朋友可能奇怪,main裡面什麼都沒有,怎麼也打印了

原因是執行main方法之前,必須先加載TestStatic類

Java裡static作用,15K的程序員敢說理解的很清楚嗎

如果把 new TestStatic(); 註釋放開運行結果是這樣的

Java裡static作用,15K的程序員敢說理解的很清楚嗎

案例二

這個案例如果你很清楚初始化順序,肯定基礎非常紮實

Java裡static作用,15K的程序員敢說理解的很清楚嗎

Java裡static作用,15K的程序員敢說理解的很清楚嗎

Java裡static作用,15K的程序員敢說理解的很清楚嗎

運行結果

Java裡static作用,15K的程序員敢說理解的很清楚嗎

我把main位置移動到Son類,輸出結果是一樣的

Java裡static作用,15K的程序員敢說理解的很清楚嗎

這個執行過程比較複雜,一個一個分析下

具體執行過程

  • 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 構造器】

對象的初始化過程優先級

  • 靜態成員變量>靜態方法>普通成員變量>構造器 【記住規律】
  • 父類>子類 【父類的優先子類加載,靜態、普通都一樣】
  • 成員變量>構造器【這個順序記住吧】

案例三

內存簡單分析

Java裡static作用,15K的程序員敢說理解的很清楚嗎

Java裡static作用,15K的程序員敢說理解的很清楚嗎

內存圖

Java裡static作用,15K的程序員敢說理解的很清楚嗎

age前加個static,其他都不變

Java裡static作用,15K的程序員敢說理解的很清楚嗎

輸出結果

Java裡static作用,15K的程序員敢說理解的很清楚嗎

原因

看圖,age從原來的堆變到了靜態存儲去

Java裡static作用,15K的程序員敢說理解的很清楚嗎

java編程思想

Java裡static作用,15K的程序員敢說理解的很清楚嗎

Java裡static作用,15K的程序員敢說理解的很清楚嗎


分享到:


相關文章: