1. 程式人生 > >java 程式碼載入順序

java 程式碼載入順序



例子:
class X{      Y y= new Y();      public X(){          System.out.print( "X" );      } }
class Y{      public Y(){          System.out.print( "Y" );      } } public  class Z  extends X{     
Y y= new Y();      public Z(){          System.out.print( "Z" );      }      public static void main(String[] args) {
         new Z();      } }

初始化過程:  1.   初始化父類中的靜態成員變數和靜態程式碼塊   ;  2.   初始化子類中的靜態成員變數和靜態程式碼塊   ;  3.初始化父類的普通成員變數和程式碼塊,再執行父類的構造方法; 4.初始化子類的普通成員變數和程式碼塊,再執行子類的構造方法;    (1)初始化父類的普通成員變數和程式碼塊,執行  Y y=new   Y();    輸出Y  (2)再執行父類的構造方法;輸出X (3)   初始化子類的普通成員變數和程式碼塊,執行  Y y=new     Y();   輸出Y  (4)再執行子類的構造方法;輸出Z  所以輸出YXYZ
例子:
class X{      Y y= new Y();      public X(){          System.out.print( "X" );      } } class Y{      public Y(){          System.out.print( "Y" );      } } public  class Z  extends X{      Y y= new Y();      public Z(){          System.out.print( "Z" );      }      public static void main(String[] args) {          new Z();      } }

初始化過程:  1.   初始化父類中的靜態成員變數和靜態程式碼塊   ;  2.   初始化子類中的靜態成員變數和靜態程式碼塊   ;  3.初始化父類的普通成員變數和程式碼塊,再執行父類的構造方法; 4.初始化子類的普通成員變數和程式碼塊,再執行子類的構造方法;    (1)初始化父類的普通成員變數和程式碼塊,執行  Y y=new   Y();    輸出Y  (2)再執行父類的構造方法;輸出X (3)   初始化子類的普通成員變數和程式碼塊,執行  Y y=new     Y();   輸出Y  (4)再執行子類的構造方法;輸出Z  所以輸出YXYZ