Java 静态成员包括静态成员变量,代码块和方法。由于暂时无法测试方法的初始化,所以暂时忽略。
我创建了一个示例类:
1 package com.juneny.foundation; 2 3 public class InitSeq { 4 5 public static ForSeqTest fst1 = new ForSeqTest("create obj 1"); 6 public static ForSeqTest fst2 = new ForSeqTest("create obj 2"); 7 8 static { 9 System.out.println("Static block 1"); 10 } 11 12 static { 13 System.out.println("Static block 2"); 14 } 15 16 public static void main(String[] args) { 17 18 } 19 } 20 21 class ForSeqTest { 22 23 public ForSeqTest(String msg) { 24 System.out.println(msg); 25 } 26 }
运行一下,得到输出:
create obj 1
create obj 2
Static block 1
Static block 2
看起来,好像执行顺序是按照定义的顺序,比较符合习惯。但是还是要测试一下,比如,我们改变一下定义的顺序:
1 public static ForSeqTest fst1 = new ForSeqTest("create obj 1"); 2 3 static { 4 System.out.println("Static block 2"); 5 } 6 7 public static ForSeqTest fst2 = new ForSeqTest("create obj 2"); 8 9 static { 10 System.out.println("Static block 1"); 11 }
然后输出变成了这样:
create obj 1 Static block 2 create obj 2 Static block 1
完全和定义的顺序一致。
那我们可以暂时得到以下结论:
结论:
java 类的静态成员按照定义的顺序,依次初始化。