靜態代碼塊在何時調用


概括的說:靜態代碼塊在類加載時調用,並且只調用一次。
靜態代碼塊最常用的作用就是:給一個對象的屬性初始化。
具體的說:
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*///:~
 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM