package testbymyself;public class Test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Xxx x=new Xxx(100);
x.print();
System.out.println(x.x);
}
}
class Xxx{
private int i;
Xxx x;
public Xxx(){
i=10;
x=null;
}
public Xxx(int i) {
this.i=i;
x=new Xxx();
}
public void print(){
System.out.println("i="+i);
System.out.println(x);
}
public String toString(){
return "i="+i;
}
}输出结果:
i=100
i=10
i=10System.out.println(x);
x=null;
x=new Xxx();
System.out.println(x.x);
public String toString(){
return "i="+i;
}
具体这几段代码请详细解释一下呢?谢谢!

解决方案 »

  1.   

    public class Test { //你定义的第一个类public static void main(String[] args) {
    Xxx x=new Xxx(100);  //①创建Xxx类的一个对象1,保存到名为x的变量。创建过程中会调用Xxx(int i)构造器
    x.print();  //④调用对象1的print方法
    System.out.println(x.x);  //⑦打印对象1的成员x也就是对象2的toString结果:i=10
    }
    }
    class Xxx{
    private int i;
    Xxx x;
    public Xxx(){
    i=10;
    x=null;
    }
    public Xxx(int i) { //②此构造器被调用
    this.i=i;
    x=new Xxx();  //③调用默认构造器创建了Xxx本类的另一个对象2,保存到本对象(对象1)的x属性中
    }
    public void print(){
    System.out.println("i="+i);  //⑤打印对象1的成员变量,i=100
    System.out.println(x); //⑥打印成员x,也就是对象2的toString结果,i=10
    }
    public String toString(){
    return "i="+i;
    }
    }//上文中序号是时间次序。
    //希望能帮到你。
      

  2.   

    System.out.println(x);
    System.out.println(x.x);
    public String toString(){
    return "i="+i;
    }
    这几句可以一起说说。System.out.println的参数如果是一个非基本类型的对象,那么实际效果是调用这个对象的toString方法。对于自己构造的类而言,因为所有类原则上都继承了基类Object,所以也会继承Object的toString方法。具体会返回什么,你可以自己试试(我忘了)。如果你为这个类定义了toString方法,那么使用System.out.println时就会调用你自己的toString方法。
    前两行代码相当于
    System.out.println(x.toString());
    System.out.println(x.x.toString());
    x = null;就是设定这个变量为空,啥也没有。
    new Xxx()就是构造一个类的对象,如果你没定义构造函数,就是啥也不做,有一个类而已,如果有,就调用对应参数一致的构造函数。
      

  3.   

    那我再来说一说那个x=null吧,就是设置x为空的变量;
    Xxx x=new Xxx(100);设定这个x为1;
    x.print();1运行print方法public void print(){
    System.out.println("i="+i);//输出i=100
    System.out.println(x);//此为1的内嵌x,设这个x为2,调用了
    public Xxx(){
    i=10;
    x=null;
    }这个构造函数,里面的x为2的内嵌x,设这个x为3.所以2输出的结果为“i=10”;
    }System.out.println(x.x);//所以是输出2也就是"i=10";//如果System.out.println(x.x.x);//输出的就是3了,也就是null;
      

  4.   

    最重要是重写了toString()那里,其他就不说了!!!!!
      

  5.   

    1、System.out.println(x);  打印出你Xxx中定义的Xxx类型的,名叫x的成员对象,在对象打印时,自动调用toStirng()方法,你已经覆写了Object中的toString(),i的值,是无参构造中的i值,因为你在含参中,调用了无参,所以会打印出10;
    2、x=null;取消了x对象的指向。
    3、实例化x,目的在于为i赋值。
    4、System.out.println(x.x);打印x对象中,名为x的成员对象,及调用成员对象的toString()方法.