1. 程式人生 > >Java靜態初始化,例項初始化以及構造方法

Java靜態初始化,例項初始化以及構造方法

首先有三個概念需要了解:

一.靜態初始化:是指執行靜態初始化塊裡面的內容。
二.例項初始化:是指執行例項初始化塊裡面的內容。
三.構造方法:一個名稱跟類的名稱一樣的方法,特殊在於不帶返回值。
我們先來看一段程式結果:

package com;

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~");     
    } 
    
    public static void main(String []args){
    	//Book book=new Book();
    }
}

執行結果:
this is static method~
this is static block
如果把 
  public static void main(String []args){
    	//Book book=new Book();
    }
的註釋去掉的話,執行結果為:
this is static method~
this is static block
初始化塊:0
this is Book's constructor~
總結:

僅從程式碼執行的角度來探討Java載入類、建立物件的過程,並沒有深入到JVM的機制中去。

1.一個物件第一次被建立時,先要載入該物件所屬的類,即對應的.class檔案,當然如果類已經載入,再次建立該類的物件時,就不再需要重新載入類了。而一個類載入的時候,有三個部分需要載入,一個是靜態變數,再然後是靜態方法,然後是靜態初始化塊。 (見到第一次執行結果就知道了,由於沒有建立例項所以初始化塊不執行)

2.然後開始建立該類的例項了,當然如果靜態方法跟靜態初始化物件中有物件的建立時,就繼續載入該物件的類,當然已經載入了該物件的類的話就不需要再次加 載了。那麼物件例項的建立過程是什麼呢?首先是成員變數的引入,然後是例項初始化塊,之後才是構造方法,構造方法執行完成之後才算把這個物件給創建出來了。

在這個過程中,真正可以編寫執行程式碼的地方有三個,靜態初始化、例項初始化以及構造方法。從以上的分析中我們可以看到,這三個程式碼塊的執行順序是先類的靜態初始化,再例項初始化,最後執行構造方法。也就是說,靜態初始化是屬於類載入的過程,所以它只執行一次,而例項初始化是每個物件建立時都會執行一次,而構造方法跟例項初始化其實也差不多,不過它在例項初始化之後執行,而且構造方法可以過載多個,執行哪個構造方法是根據你的選擇來的。
可以把main () 函式加一條語句看看:

   public static void main(String []args){
    	Book book=new Book();
    	Book book1=new Book();
    }
此時執行結果為:

this is static method~
this is static block
初始化塊:0
this is Book's constructor~
初始化塊:1
this is Book's constructor~
這說明例項初始化是每個物件建立時都會執行的。