1. 程式人生 > >靜態代碼塊在何時調用

靜態代碼塊在何時調用

output adc pri param string rate print [] con

概括的說:靜態代碼塊在類加載時調用,並且只調用一次。
靜態代碼塊最常用的作用就是:給一個對象的屬性初始化。
具體的說:
1.當調用一個類的靜態變量時,這個類中的靜態代碼塊會執行。【只有靜態代碼塊會執行】 2.當調用一個 類的靜態方法時,這個類中的靜態代碼塊會執行。【只有靜態代碼塊會執行】 3.當創建一個 類的一個實例時,這個類中的靜態代碼塊、非靜態代碼塊(也叫構造代碼塊)、創建實例的相應的構造方法都會執行。
//示例代碼如下:
package com.qls.test; /** * 在創建Test6的一個實例時:即Test6 test6=new Test6(); * 調用的順序依次是:靜態代碼塊、非靜態代碼塊、構造方法。並且靜態代碼塊只運行依次。 * 每創建一個Test6實例,非靜態代碼塊、構造方法都會執行。這與靜態代碼塊只執行一次是不同的。 * @author 秦林森 * */ public class Test6 { /** * 靜態代碼塊 * @param args */ static{ System.out.println("Test6 static block"); } /** * 非靜態代碼塊 * @param args */ { System.out.println("Test6 non-static block"); } /** * 構造方法 * @param args */ public Test6() { System.out.println("Test6 constructor with no arguments"); } public Test6(String id){ System.out.println("Test6 constructor with one argument id"+ id); } public static int book=1; public static void sixi(){ System.out.println("static method"); } public static void main(String[] args) { // TODO Auto-generated method stub /*new Test6(); System.out.println("*****************"); new Test6("1");*/ //System.out.println(Test6.book);//調用靜態變量時,只有靜態代碼塊會執行。 Test6.sixi();//在調用靜態方法時,只有靜態代碼塊會執行。
//Test6.class.getClassLoader().loadClass(Test6.class.getName());//在Test6下面的main方法寫這個語句,靜態代碼塊會執行,
//但是不在Test6這個類下面,這句話就不能讓靜態代碼塊執行。 //Class.forName(Test6.class.getName());//加載Test6時,只有靜態代碼塊會執行。 } }/*Output: Test6 static block Test6 non-static block Test6 constructor with no arguments ***************** Test6 non-static block Test6 constructor with one argument id1*///:~



靜態代碼塊在何時調用