靜態程式碼初始化詳解
阿新 • • 發佈:2019-02-04
大家都知道在JavaSE 中程式的run 都是在JVM中進行的,刨除反射,幾乎所有的方法的執行都需要new 一下
也就是new 一個物件。“你有物件嗎?new 一個啊”。
new 的過程就是在堆中開闢出一個空間。也就是初始化的過程。
非靜態成員的初始化這裡就不提了,這裡說的是靜態變數的初始化的過程。
static關鍵字大家都不陌生,最熟悉的莫過於static main方法了。被static修飾的靜態資料,無論建立多少個物件,都分配一塊儲存區域。同時static不能作用於區域性變數,只能作用於域中。
如果一個域是靜態的基本型別域,並且沒有對他進行初始化,那麼就會獲得基本型別的標準初始值,int =0 ,Boolean = false 而object型別的則是null 等等。
通過大家的日常不難發現靜態物件只在需要的時候初始化,而且只會被初始化一次。而且初始化的順序是先靜態後非靜態的。下面通過程式碼來看一下顯示的靜態初始化的過程。
通過這個程式碼執行發現,我們不論是new 一下還是呼叫靜態方法都會對Cups 這個類中的a , b進行一次初始化。同樣的我們不論new 幾次,靜態化動作都只執行一次。public class StaticDemo { public static void main(String[] args) { Cups.a.hello(); //或者注掉 } static Cups cu = new Cups(); //或者注掉 } class Cup { public Cup(int a) { System.out.println("Cup"+a); } void hello () { System.out.println("hello world"); } } class Cups { static Cup a ; static Cup b ; static { a = new Cup(10); b = new Cup(30); } }
我們不可否認 的是:靜態方法 和靜態變數不論在哪裡 用起來都是非常的快,非常的方便。但是一個程式碼中如果出現大量的static 的話 會另整個程式碼“垮掉”。用“垮掉”來說並不為過。因此在用靜態方法的時候一定要非常的小心。