public class Text
{
public static void main(String args[])
{
new Text(2L);
}

public Text(int x)
{
this();
System.out.print(x*3);
}

public Text(long x)
{
this((int)x);
System.out.print(x);
}

public Text()
{
System.out.print("A");
}
}
为什么程序执行出来是A62,而不是62A呢?

解决方案 »

  1.   

    最简单的理解就是顺序调用啊!!!!!this()表示调用其它的构造函数啊
      

  2.   

    new Text(2L);
    根据参数类型判断,先调用public Text(long x)
    该方法调用this((int)x);即public Text(int x)
    这个方法又调用this();即public Text()
    所以先System.out.print("A");
    然后执行System.out.print(x*3);
    再执行System.out.print(x);
      

  3.   

    new Text(2L);这时构造函数text(long x)执行,接着执行第一句this((int)x),this就是指向当前类,这样的话就继续执行text(int x)这个构造函数,然后再调用这个函数里的this(),这是就执行没有参数的构造方法 text() 显示
    A ->2*3 -> 2  
    最后输出A62 
      

  4.   

    [Quote=引用楼主 dhttony 的帖子:]public class Text
    {
        public static void main(String args[])
        {
            new Text(2L);  //1:调用Text(Long x)转向2
        }
        
        public Text(int x) //3:执行
        {
            this();   //调用无参构造 转向4
            System.out.print(x*3);//5: 输出X*3=6 回到2 执行2后面的语句    
        public Text(long x) //2:执行
        {
            this((int)x); //调用Text(int x) 转向3
            System.out.print(x); //6:输出X=2   -- 程序结束
        }
        
        public Text() //4执行--输出'A' 回到3执行3后的语句
        {
            System.out.print("A");
        }
    }
      

  5.   

    执行过程,见注释:public class Text
    {
        public static void main(String args[])
        {
            new Text(2L); //第一步 ,进入Text(long x)
        }
        
        public Text(int x)
        {
            this(); //第三步,进入Text()
            System.out.print(x*3); //第五步
        }
        
        public Text(long x)
        {
            this((int)x); //第二步,进入Text(int x)
            System.out.print(x); //第六步
        }
        
        public Text()
        {
            System.out.print("A"); //第四步
        }
    }详细说明:
    首先进入main函数体
    执行new Text(2L),因为传入的是long类型参数,因此进入Text(long x)构造方法:
        public Text(long x)
        {
          this((int)x);  
           System.out.print(x); 
        }
    执行Text(long x)方法中第一句this((int)x),调用参数类型为int的构造方法,因此进入Text(int x)方法:
        public Text(int x)
        {
            this();        
             System.out.print(x*3);     
         }
    执行Text(int x)方法第一句this()调用无参构造方法Text(),打印"A";
    Text(int x)第一句执行完毕,然后执行Text(int x)方法第二句,打印"6";
    Text(long x)第一句执行完毕,然后执行Text(long x)方法第二句,打印"2".
    执行完毕!