代碼塊的優先級要比構造函數高,new對象前先去硬盤讀取自解碼,完成類的初始化-加載靜態,而後new了對象就完成屬性方法的初始化(先加載代碼塊再加載構造方法),因此new第二個對象的時候就不會再初始化類了(不用再加載一遍靜態代碼塊)函數
public class Person { public final String name; public int age; public Person() { System.out.println("無參構造方法"); } { System.out.println("代碼塊2"); } { System.out.println("代碼塊1"); name = "小明"; } static { System.out.println("靜態代碼塊2"); } static { System.out.println("靜態代碼塊1"); } public Person(int age) { this.age = age; //this.name = ""; System.out.println("構造age方法"); } public void goToSchool() { System.out.println(name + "goToSchool方法"); } }
public class TestPerson { public static void main(String args[]) { Person person = new Person(); Person person2 = new Person(); } } 靜態代碼塊2 靜態代碼塊1 代碼塊2 代碼塊1 無參構造方法 代碼塊2 代碼塊1 無參構造方法