当前位置: 代码迷 >> J2SE >> java类的加载顺序 哪位高手能给小弟我解释一下么?
  详细解决方案

java类的加载顺序 哪位高手能给小弟我解释一下么?

热度:8   发布时间:2016-04-23 19:59:36.0
java类的加载顺序 谁能给我解释一下么???
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指定的默认值。最后执行构造器