class Component1
{
Component1()
{
System.out.println("This is Component1!");
}
}class Component2
{
Component2()
{
System.out.println("This is Component2!");
}
}
class Component3
{
Component3()
{
System.out.println("This is Component3!");
}
}
public class Root {    Root()
    {  
     System.out.println("This is Root!");
    }
    Component1 aa=new Component1();
    Component2 bb=new Component2();
    Component3 cc=new Component3();
    
public static void main(String[] args) {

      new Root();
  
     
}}  这个程序为什么是先执行    Component1 aa=new Component1();
    Component2 bb=new Component2();
    Component3 cc=new Component3(); 然后才执行Root类的构造方法!

解决方案 »

  1.   

    因为Component1 aa=new Component1(); 
        Component2 bb=new Component2(); 
        Component3 cc=new Component3(); 都是成员变量,成员变量的初始化先执行,然后是Root构造体!
      

  2.   

    另外,,在main()方法中加上System.out.println("This is print");
    结果 是
    This is print
    This is Component1!
    This is Component2!
    This is Component3!
    This is Root!
      

  3.   

    同意1楼的看法。在用 new实例化对象时候首先将类中成员变量先初始化,然后才调用构造方法,调用构造方法的目的是
    返回该类对象的引用,所以一定要确保对象的所有成员先初始化才能够返回引用。