java类的加载顺序 谁能给我解释一下么???
public class StaticTest {
public static int k=0;
public static StaticTest s1=new StaticTest("s1","2");
public static StaticTest s2=new StaticTest("s2","3");
public static int i=print("i");
public static int n=99;
public int j=print("j");
public static String name="0";
public static int h=print("h");
{
print("构造块");
}
static
{
print("静态块");
}
public static int print(String s)
{
System.out.println(++k+":"+s+"\ti="+i+"\tn="+n+"\tpname="+name);
++n;
return ++i;
}
public StaticTest(String s,String name)
{
this.name=name;
System.out.println(++k+":"+s+"\ti="+i+"\tn="+n+"\tcname="+name);
++i;
++n;
}
public static void main(String[] args) {
StaticTest s= new StaticTest("init","1");
}
}
运行结果
1:j i=0 n=0 pname=null
2:构造块 i=1 n=1 pname=null
3:s1 i=2 n=2 cname=2
4:j i=3 n=3 pname=2
5:构造块 i=4 n=4 pname=2
6:s2 i=5 n=5 cname=3
7:i i=6 n=6 pname=3
8:h i=7 n=99 pname=0
9:静态块 i=8 n=100 pname=0
10:j i=9 n=101 pname=0
11:构造块 i=10 n=102 pname=0
12:init i=11 n=103 cname=1
------解决思路----------------------
先加载静态初始化块和声明静态Field指定的默认值(都可以看做静态初始化代码,按书写顺序执行)。然后执行普通初始化块和声明实例Field指定的默认值。最后执行构造器