1. 程式人生 > >靜態程式碼初始化詳解

靜態程式碼初始化詳解

大家都知道在JavaSE 中程式的run 都是在JVM中進行的,刨除反射,幾乎所有的方法的執行都需要new 一下

也就是new 一個物件。“你有物件嗎?new 一個啊”。

new 的過程就是在堆中開闢出一個空間。也就是初始化的過程。

非靜態成員的初始化這裡就不提了,這裡說的是靜態變數的初始化的過程。

static關鍵字大家都不陌生,最熟悉的莫過於static main方法了。被static修飾的靜態資料,無論建立多少個物件,都分配一塊儲存區域。同時static不能作用於區域性變數,只能作用於域中。

如果一個域是靜態的基本型別域,並且沒有對他進行初始化,那麼就會獲得基本型別的標準初始值,int =0 ,Boolean = false  而object型別的則是null 等等。

通過大家的日常不難發現靜態物件只在需要的時候初始化,而且只會被初始化一次。而且初始化的順序是先靜態後非靜態的。下面通過程式碼來看一下顯示的靜態初始化的過程。

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);
	}
		
}
通過這個程式碼執行發現,我們不論是new 一下還是呼叫靜態方法都會對Cups 這個類中的a , b進行一次初始化。同樣的我們不論new 幾次,靜態化動作都只執行一次。

我們不可否認 的是:靜態方法 和靜態變數不論在哪裡 用起來都是非常的快,非常的方便。但是一個程式碼中如果出現大量的static 的話 會另整個程式碼“垮掉”。用“垮掉”來說並不為過。因此在用靜態方法的時候一定要非常的小心。