類何時被java類裝載器裝入系統
(1) 當使用該類訪問它的靜態成員變量或使用該類調用其靜態方法時,這個時候,儘管沒有創建該類的對象,但該類還是被裝入系統了。
(2) 當使用new關鍵字,創建該類的對象時,該類也將被裝入系統。
而靜態初始化塊,只在類被java類裝載器第一次裝入系統時才被調用,且在整個過程中只調用這一次。
下面例子說明了這一點:
public class ClassGrade {
public static void main(String[] args) {
//訪問Student類的靜態成員變量sid,類被第一裝入系統,靜態初始化塊被調用
Student.sid = 25;
System.out.println(Student.sid);
//用new關鍵字創建Student對象s,類被第二次裝入系統,由於是第二次裝入系統,
//所以靜態代碼塊不會被調用(靜態代碼塊只會在系統裝入第一次被調用)
Student s = new Student();
System.out.println(s.toString());
}
}
class Student {
private String name = "William";
private int age = 22;
static int sid;
static {
System.out.println("I am a student ...");
}
public String toString(){
return this.name + "," + this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
運行上述代碼能很清晰的瞭解結果。