class Tag
{
Tag(int er)
{
System.out.println("Tag("+er+")");
  } 
}
class Card
{
Tag t1=new Tag(1);  //1
  Card()              //4
{
   System.out.println("Card()");
   t3=new Tag(33);
  }
Tag t2=new Tag(2);  //2
  void f()            //5
{
   System.out.println("f()");
  }
  Tag t3=new Tag(3);  //3
}
public class OrderOfInitialzation
{
public static void main(String[] args)
{
   Card t =new  Card();
   t.f();
}
}原因是:你 说 的 "所有变量一定会在任何一个函数(甚至构造函数)被调用之前完成初始化!":)

解决方案 »

  1.   

    我也在看thinking in java ,一起交流吧。
    这个问题约懂一二。
    首先,这个问题是初始化顺序问题。
    1.构造函数主要作用就是初始化你变量。java保证,你的变量在使用之前绝对初始化。
    2.为什么会在主函数后执行,因为任何类中的变量一定会在任何方法前初始化~~~
      
      

  2.   

    产生一个对象(如使用new运算)的过程就是构造对象。构造对象的时候就会:首先对成员进行初始化,然后调用构造方法。一个类可定义多个构造方法,也可以能构造方法加参数,以便于在构造对象的时候可以设置对象的一些基本属性,有时候构造方法传递进来的参数是设置某个/些属性的唯一机会(比如String,Integer 等不可变对象)。