错误的数据被分配给错误的变量

时间:2014-09-23 20:12:20

标签: java

public class Puppy{

   public Puppy(String name){
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name ); 
   }
   public static void main(String []args){
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

在上面的代码中,它将名称tommy分配给变量myPuppy,那么它是如何实际分配给变量名的呢?

2 个答案:

答案 0 :(得分:1)

你问:

  

那怎么实际分配给变量名呢?

不是,您目前没有为任何变量分配任何内容。特别是,你没有在构造函数中分配任何东西,尽管你可能会误以为你是由于构造函数中的println。解决这个问题首先给Puppy一个名字字段,然后从构造函数中的参数赋值给那个名字字段

public class Puppy {
  // give Puppy a name field
  private String name; 

  public Puppy(String name) {
     // assign the field in the constructor
     this.name = name;
  }

  //....  getters and setters go here
  public String getName() {
     return name;
  }

  // you can do the setter method...

此外,您还要从Puppy构造函数中删除System.out.println(...),因为它不属于那里,除非它仅用于测试代码,并计划稍后将其删除。

println语句应该在main方法中:

public static void main(String []args){
   // Following statement would create an object myPuppy
   Puppy myPuppy = new Puppy( "tommy" );
   System.out.println("myPuppy's name: " + myPuppy.getName());
}

你问:

  

但是它说通过的名字是NAME。但没有任何名称,所以名字怎么变成了汤米?

name是 字符串变量 ,在您的代码中它是一个特殊类型的变量,一个参数。在println语句中,它保存了值" tommy"因为你在调用它时将它传递给了构造函数,因此输出将是" Name是tommy"。这又是因为name变量保存了值#34; tommy"。变量名称不会显示,几乎甚至不存在于已编译的代码中。

答案 1 :(得分:0)

您实际上并没有将“tommy”分配给构造函数中的任何内容。构造函数将“tommy”传递给name,但您永远不会为任何名称指定名称。你应该在Puppy类中有一个名为name的属性(变量),然后为this.name指定名称。例如:

public class Puppy{
private string name = null;
public Puppy(String name){
// This constructor has one parameter, name.
this.name = name;
System.out.println("Passed Name is :" + name ); 
}
public static void main(String []args){
// Following statement would create an object myPuppy
Puppy myPuppy = new Puppy( "tommy" );
}
}

现在您将名称存储在myPuppy对象中。