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

猜你喜欢

转载自blog.csdn.net/tangpengh/article/details/51832797