日期:2014-05-20  浏览次数:20831 次

求高手详细解释一下这段java代码
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=10

System.out.println(x);
x=null;
x=new Xxx();
System.out.println(x.x);
public String toString(){
return "i="+i;
}
具体这几段代码请详细解释一下呢?谢谢!

------解决方案--------------------
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;
}
}

//上文中序号是时间次序。
//希望能帮到你。
------解决方案--------------------
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()就是构造一个类的对象,如果你没定义构造函数,就是啥也不做,有一个类而已,如果有,就调用对应参数一致的构造函数。
------解决方案--------------------
那我再来说一说那个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;


------解决方案--------------------
最重要是重写了toString()那里,其他就不说了!!!!!
------解决方案--------------------
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()方法.
------解决方案--------------------
这个都不用高手解释的。。。。。。。。