Java类初始化过程

openkk 13年前
     <pre class="brush:cpp; toolbar: true; auto-links: false;">/* 测试3个内容: 类加载顺序 子父类执行过程 对象初始化过程   从几次试验我们看到 当执行到类时,类被加载到内存,并初始化 静态成员被加载到共享区 不用实例化对象就可以调用静态资源  静态成员变量,静态成员方法,静态代码块,只初始化一次  而普通变量,普通代码块,构造方法,在每次实例化对象时都要初始化  子类对象要初始化时, 会先初始化父类静态成员和静态代码块, 再初始化子类静态成员和静态代码块, 然后是父类普通代码块,父类构造方法 然后是子类普通代码块,子类构造函数   当子类名直接调用继承自父类的静态成员时,子类不会初始化,而只初始化父类(因为这已经足够了)   */   class Fu  //父类 {   public static String staticField = "父类-静态变量";   public static String extend = "父类-静态变量extend";  //让子类调用   public String field = "父类-普通变量";   public Fu()    {       System.out.println("父类-构造方法");   }      static    {       System.out.println("Fu_static: 父类-静态初始化块");       System.out.println("Fu_static:"+staticField);        }      {       System.out.println("Fu_普通块:"+field);       System.out.println("Fu_普通块:"+"父类-初始化块");   } }   class Zi extends Fu  //子类 {   public static String staticField = "子类 静态变量";      public String field = "子类 普通变量";    {       System.out.println("Zi_普通块:"+field);       System.out.println("Zi_普通块:"+"子类 初始化块");   }      public Zi()    {       System.out.println("子类 子类构造方法");   }      static    {       System.out.println("Zi_static:"+"子类 静态初始化块");       System.out.println("Zi_static:"+staticField);   }  }   class Demo             {   public static void main(String args[])  throws Exception   {       System.out.println("main方法");       //Thread.sleep(2000);       //System.out.println("Zi.staticField:"+Zi.staticField);              //Thread.sleep(2000);       //System.out.println("...");       //Fu fu = new Fu();              Thread.sleep(2000);       System.out.println("");              Zi zi = new Zi();       System.out.println("");       Zi zi2 = new Zi();             //System.out.println(Zi.extend);  //子类名调用父类静态成员   }    }  </pre>转自:    <a href="/misc/goto?guid=4959500252416358769" target="_blank">http://xouou.iteye.com/blog/1333841</a>    <br />