靜態塊是類裏面的構造器,對象有構造器那麼類也有構造器,類裏面的構造器叫作初始化方法。也就是new一個對象他會通過一個構造器。加載一個類,也有被初始化的一片代碼,這個就稱之爲靜態塊。一個類裏面能夠有不少個靜態塊,靜態塊的運行過程是,若是一個類裏面有多個靜態塊,那麼他是從上到下運行的。如圖7.5所示:htm
圖7.5對象
他是從上到下的運行,可是須要哪個的時候他就會被加載實例化,但靜態塊仍是從上到下執行。裏面能夠包含不少代碼 下載 ,可是靜態塊不能被實例的成員訪問。如圖7.51所示:blog
圖7.51內存
靜態塊是類被加載的時候就會被建立,靜態塊會被4種方式加載。第一種new對象靜態塊會初始化激發類被加載。如圖7.52所示:字符串
圖7.52get
第二種訪問靜態的屬性,也會激發類被加載。如圖7.53所示:it
圖7.53下載
第三種調用裏面的靜態方法,也會觸使類加載起來。如圖7.54所示:方法
圖7.54im
第四種用Class.forName(「Test」);能夠經過字符串加載起來,這種方式叫作動態加載,也能夠觸使一個類加載起來。如圖7.55所示: 下載
圖7.55
常量成員不能被初始化加載如圖7.56所示:
圖7.56
打印的是10,可是靜態塊的東西沒有打印出來,那就說明這個類沒有被加載起來,由於他是一個靜態的常量,靜態的常量不屬於類的內存,他沒有分配在這個類內存裏面,他不須要初始化這個類。靜態的屬性爲何能,由於靜態的屬性內存必需要分配在這個類裏面,因此他會被初始化加載,因此圖中的靜態塊不會被加載起來。