代码:
public class Dog{
static int age;
static String name;
static String breed;
public Dog(String name,int age,String breed){
this.name=name;
this.age=age;
this.breed=breed;
}
public Dog(String name,int age){
this(name,age,"greed");
}
public static void main(String args[]){
Dog high=new Dog("luffy",19,"pomerian");
Dog low=new Dog("gold",32,"german shepherd");
System.out.println(low.name+" "+low.age+" "+low.breed);
System.out.println(high.name+" "+high.age+" "+high.breed);
}
}
输出:
gold 32 german shepherd
gold 32 german shepherd
虽然我正在创建两个对象实例,但只会打印其中一个对象的字段。这个错误在哪里?
答案 0 :(得分:3)
所有static
字段都是共享的(每个类static
个字段),但您期望实例字段(每个实例)。变化
static int age;
static String name;
static String breed;
到
private int age;
private String name;
private String breed;
您应该拥有访问者(get
ters)方法 - 如果添加toString()
,您的打印将会简化。像,
@Override
public String toString() {
return name + " " + age + " " + breed;
}
然后你可以{/ 1}}只用
print
答案 1 :(得分:2)
您已经为每个类对象使用了静态访问修饰符和静态变量共享内存。如果您不想要,那么只需从年龄,名称,品种中删除静态
public class Dog{
int age;
String name;
String breed;
public Dog(String name,int age,String breed){
this.name=name;
this.age=age;
this.breed=breed;
}
public Dog(String name,int age){
this(name,age,"greed");
}
public static void main(String args[]){
Dog high=new Dog("luffy",19,"pomerian");
Dog low=new Dog("gold",32,"german shepherd");
System.out.println(low.name+" "+low.age+" "+low.breed);
System.out.println(high.name+" "+high.age+" "+high.breed);
}
}
答案 2 :(得分:0)
在您的代码中将静态更改为私有:
示例:
public class Dog{
private int age;
private String name;
private String breed;
public Dog(String name,int age,String breed){
this.name=name;
this.age=age;
this.breed=breed;
}
public Dog(String name,int age){
this(name,age,"greed");
}
}
public static void main(String args[]){
Dog high=new Dog("luffy",19,"pomerian");
Dog low=new Dog("gold",32,"german shepherd");
System.out.println(low.name+" "+low.age+" "+low.breed);
System.out.println(high.name+" "+high.age+" "+high.breed);
}
}
输出:
luffy 19 pomerian
gold 32 german shepherd
另外:
public class Dog{
private int age;
private String name;
private String breed;
public Dog(String name,int age,String breed){
this.name=name;
this.age=age;
this.breed=breed;
}
public Dog(String name,int age){
this(name,age,"greed");
}
void toStrig (){
System.out.println(name+" "+ age+" "+breed);
}
public static void main(String args[]){
Dog high=new Dog("luffy",19,"pomerian");
Dog low=new Dog("gold",32,"german shepherd");
high.toStrig();
low.toStrig();
}
}
输出:
luffy 19 pomerian
gold 32 german shepherd