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,那么它是如何实际分配给变量名的呢?
答案 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对象中。