首先有三個概念需要了解:
一.靜態初始化:是指執行靜態初始化塊里面的內容。
二.實例初始化:是指執行實例初始化塊里面的內容。
三.構造方法:一個名稱跟類的名稱一樣的方法,特殊在于不帶返回值。
對于這三個概念,給出以下程序,方便理解:
Java代碼 
class Book{
public static int booksum=0;//靜態變量
static{//這是靜態初始化塊
print();
System.out.println("this is static block");
}
{//實例初始化塊
System.out.println(booksum);
}
public Book(){//構造方法
System.out.println("this is Book's constructor~");
booksum+=1;
}
public static void print(){//靜態方法
System.out.println("this is static method~");
}
}
我僅從代碼執行的角度來探討Java加載類、創建對象的過程,并沒有深入到JVM的機制中去,因此不保證JVM是
這樣的一個過程,但我認為如果僅想對Java的代碼執行過程有個了解,我下面的分析就足夠了。
1.一個對象第一次被創建時,先要加載該對象所屬的類,即對應的.class文件,當然如果類已經加載,再次創建該類的對象時,就不再需要重新加載類了。
而一個類加載的時候,有三個部分需要加載: a:一個是靜態變量,
b:再然后是靜態方法,
c:然后是靜態初始化塊。
2
.然后開始創建該類的實例了,當然如果靜態方法跟靜態初始化對象中有對象的創建時,就繼續加載該對象的類,當然已經加載了該對象的類的話就不需要再次加載了。那么對象實例的創建過程是什么呢? a:首先是成員變量的引入,
b:然后是實例初始化塊,
c:之后才是構造方法,
構造方法執行完成之后才算把這個對象給創建出來了。
在這個過程中,真正可以編寫執行代碼的地方有三個, a:靜態初始化、
b:實例初始化
c:以及構造方法。
從以上的分析中我們可以看到,這三個代碼塊的執行順序是
先類的靜態初始化,
再實例初始化,
最后執行構造方法。
也就是說,靜態初始化是屬于類加載的過程,所以它只執行一次,而實例初始化是每個對象創建時都會執行一次,而構造方法跟實例初始化其實也差不多,不過它在實例初始化之后執行,而且構造方法可以重載多個,執行哪個構造方法是根據你的選擇來的。實例初始化據 Thinking in Java上說,對于匿名內部類的初始化來說是必須的。不過我還沒看到那邊,先了解一下,類的基本執行過程,做個總結,歡迎批評指正。