靜態代碼塊、靜態變量等執行順序
阿新 • • 發佈:2018-03-17
div generate strong 練習 str blog 代碼 out 靜態成員變量
1 public class BasicTest { 2 public static void main(String[] args) { 3 System.out.println("m1:"); 4 Mimi m1=new Mimi(); 5 System.out.println("m2:"); 6 Mimi m2=new Mimi(); 7 } 8 } 9 10 class Mimi { 11 public static int si=0; 12 int di=si; 13 static{ 14 //首先執行 15 si++; 16 System.out.println("static block1: si="+si); 17 } 18 19 { 20 //si*=2; 21 System.out.println("block2: si="+si+", di="+di); 22 } 23 24 static{ 25 //首先執行 26 si++; 27 System.out.println("static block2: si="+si);28 } 29 30 public Mimi() { 31 di=10; 32 System.out.println("constructor: si="+si+", di="+di); 33 si=500; 34 } 35 }
執行順序是:
靜態成員變量初始化
靜態代碼塊調用
動態成員變量初始化
非靜態代碼塊調用
構造方法調用
以下供練習:
1 public class TestPerson { 2 3 public static void main(String[] args) { 4 //TODO Auto-generated method stub 5 Person person = new Person(); 6 Person person2 = new Person(); 7 } 8 9 } 10 11 class Person { 12 public final String name; 13 public int age; 14 15 public Person() { 16 System.out.println("無參構造方法"); 17 } 18 19 { 20 System.out.println("代碼塊2"); 21 } 22 23 { 24 System.out.println("代碼塊1"); 25 name = "小明"; 26 } 27 28 static { 29 System.out.println("靜態代碼塊2"); 30 } 31 32 static { 33 System.out.println("靜態代碼塊1"); 34 } 35 36 37 38 public Person(int age) { 39 this.age = age; 40 //this.name = ""; 41 System.out.println("構造age方法"); 42 } 43 44 public void goToSchool() { 45 System.out.println(name + "goToSchool方法"); 46 } 47 }
結果:
靜態代碼塊2
靜態代碼塊1
代碼塊2
代碼塊1
無參構造方法
代碼塊2
代碼塊1
無參構造方法
靜態代碼塊、靜態變量等執行順序