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

小程序的输出,求“详细”解答

  public class Test {
String name = "Tom";
public Test(String name) {
name =name;
}
public static void main(String[]args){
Test t=new Test("jack");
System.out.println(t.name);
}
 }

新手求大神指点,帮解释详细的输出和解答
------解决方案--------------------
public class Test
{
String name = "Tom";

public Test(String name)
{
this.name = name;
}

public static void main(String[] args)
{
Test t = new Test("jack");  //第一步:创建对象,并初始化,调用构造方法Test(String name)
System.out.println(t.name); //第二部,将name打印出来;
}
}

------解决方案--------------------
你这样写输出Tom
你构造函数写的有点小问题,应该改成
this.name=name;

这样输出的就是jack
------解决方案--------------------
name =name;
你的这一句你应该看到了提示The assignment to variable name has no effect
你的构造方法完全没有取到全局变量name,只取到了局部的参数name,所以构造方法等于失效。
你改成 this.name=name; 就对了,this.name就能取到你本类的name。
------解决方案--------------------
String name = "Tom";
public list(String name1) {
name =name1;
}

你ctrl    鼠标  放上去你看看 name 到底是那个,  一个是全局,一个是局部
------解决方案--------------------
你代码好比
 public list(String name1) {
name1 =name1;
}
String name = "Tom";  这个还没有赋值。
------解决方案--------------------
你第二个name 没有加this,构造函数里的name跟外面的name完全不影响。所以t.name == “TOM”
------解决方案--------------------
引用:
上面的代码怎么会输出Tom呢?jack的参数没传进去?
jack参数已经传进去了,但是你的代码有点迷惑。
name = name; //这个是在方法类,方法类的属性是私有的,方法内部专属,这里的两个name没有指明,默认都是方法私有,也就是传进来的参数(两个name指向同一个引用jack)这种写法没意义。要想调用方法外的属性,需要加上前缀,指明是方法外的哪个类的哪个属性,这里应该写成this.name=name;(this的用法自己去找资料) 这样输出的才是jack