Java创建对象实例时出现输出异常的问题排查与解决
问题分析与解决方案
嘿,我一眼就看出问题出在哪了!你的Dog类里的age、name、breed这三个属性都加了static修饰符,这可是个关键错误哦。
为什么会出现这个问题?
在Java中,被static修饰的变量属于类本身,而不是类的某个实例对象。也就是说,不管你创建多少个Dog对象,它们都会共用这三个静态变量的值:
- 当你创建第一个对象
high时,静态变量被设置为"luffy"、19、"pomerian" - 紧接着创建第二个对象
low时,这三个静态变量的值被直接覆盖成了"gold"、32、"german shepherd" - 最后打印两个对象的属性时,其实都是在读取类的静态变量值,自然就输出了最后一次设置的结果
修改后的正确代码
只需要去掉属性前面的static关键字,让它们成为实例变量,每个Dog对象就会拥有自己独立的属性副本了:
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); } }
修改后的运行结果
gold 32 german shepherd luffy 19 pomerian
这样就符合你期望的输出,两个对象各自保留自己的属性值啦。
内容的提问来源于stack exchange,提问作者rajat008
相关产品推荐
相关产品推荐

