代碼塊
a)普通代碼塊
b)構造塊:類中定義的代碼塊,對象產生時執行,產生幾個對象執行幾次,優先於構造方法
c)靜態代碼塊:類加載時執行,優先於構造塊,只執行一次,main中的優先於main
關於代碼塊有一個經典的問題,就是構造方法,構造塊以及靜態塊的區別和執行順序
class A{
public A(){
System.out.println("1.A類的構造方法");
}
{
System.out.println("2.A類的構造塊");
}
static {
System.out.println("3.A類的靜態塊");
}
}
public class KuaiTest extends A{
public KuaiTest(){
System.out.println("4.B構造方法");
}
{
System.out.println("5.B類的構造塊");
}
static {
System.out.println("6.B類的靜態塊");
}
public static void main(String[] args) {
System.out.println("7.start------");
new KuaiTest();
new KuaiTest();
System.out.println("8.end");
}
}
因爲主類中的靜態塊優先於主方法執行,因此先執行靜態代碼塊進行類加載過程
又因爲繼承,所以執行3,6,此時類加載完畢,進入主方法7,接下來new對象,先調用父類構造方法,再調用子類構造方法,
又因爲構造塊優先於構造方法,且new幾個對象調用幾次,因此構造方法調用順序爲21542154
最後執行8因此最後結果爲
367215421548