类实例化时会先初始化成员变量,所以会先执行Tag t1 = new Tag(1);

解决方案 »

  1.   

    首先执行定义变量或对象的语句,以及static块
    然后是构造函数
    最后是方法(当然要被调用才能执行)
      

  2.   

    这个例子应该是JAVA编程思想中的吧。
       class中的初始化次序取决于变量在class中的定义次序。变量定义也许会散落各处,而且有可能介于各个函数定义之间。但所有变量一定会在任何一个函数(甚至是构造函数)被调用之前完成初始化。所以例子中的:t1,t2,t3会在Card这个构造函数调用之前完成初始化。
      

  3.   

    比如有下面的代码public class MyObj {
        private Integer id;
        private String myName;
        private int age = 24;  //变量初始值操作    public MyObj() {
    this.id = new Integer(1);//在构造函数里为变量赋值        
    this.myName = "truezerg"; //在构造函数里为变量赋值
            this.age = 23;
        }
    }MyObj myObj = new MyObj();创建一个MyObj类的对象所发生事情的顺序是:
    1.首先分配内存来存放MyObj实例以及它的父类中的实例变量(在这里它的你类是java.lang.Object)
    2.给实例变量初始化为相应的缺省值。 object references 为 null ,其它类型按照各自的缺省值初始化
    比如上面的那段代码会将这三个属性设置成:
    id = null;
    myName = null;
    age = 0;3.调用这个MyObj的构造函数
    4.MyObj类的构造函数首先调用它父类的构造函数。.. 以此类推,直到 java.lang.Object的构造函数为止。
    5.当父类的构造函数一层层的返回,直到返回到MyObj的构造函数时,执行实例变量的设初始值操作(注意不是初始化)
    上面的代码将会做的是:
    age = 24;6.执行构造方法中的为实例变量赋值操作。
    上面的代码将会做的是:
    this.id = new Integer(1); //注意,这里又创建了一个Integer对象,对于Integer对象的创建也按照这个步骤执行。
    this.myName = "truezerg"; //这里又创建了一个String 对象,对于String 对象的创建也按照这个步骤执行。
    this.age = 23;7.将对象的引用 myObj 指向刚刚创建的这个对象