黑马程序员技术交流社区
标题:
为什么是这样的结果
[打印本页]
作者:
luojian
时间:
2016-4-10 13:07
标题:
为什么是这样的结果
public static void main(String[] args) {
Person p1 = new Person();
p1.name = “麦克”;
p1.country = "美国";
Person p2 = new Person();
p2.name = "红杉";
p2.country = "韩国";
p1.speak();
p2.speak();
}
}
class Person {
String name;
static String country = "中国";
public void speak() {
System.out.println(name + "..." + country);
}
}
作者:
grandsun
时间:
2016-4-10 13:55
本帖最后由 grandsun 于 2016-4-10 14:06 编辑
static String country = "中国";
改成String country = "中国";
不然因为country是被static修饰的.所以一次赋值,就会同时被多个对象使用
而且不会随着对象的增多而增多.始终只有一个country的成员变量.
另外static的正确调用方式应该是用类名.也就是这样:Person.country
你第一次改成"美国",就算p2的country不再赋值,也会自动变成"美国"..
如果p2的country也赋值的话,会把之前的"美国给覆盖掉"
所以如果你想要不断改变,并且有不同的country的值.就要把static修饰符去掉.
作者:
65708535
时间:
2016-4-10 14:55
楼上正解,静态修饰符修饰的原因
作者:
H_shaohui
时间:
2016-4-10 15:46
因为static修饰的成员变量有“共用”的意思,就是说被创建一次后,后面的调用都会共用这一个变量,如果前面有改变,就会全部覆盖为改变后的值。楼上的解释已经说得很明白了
作者:
IT小笨鸟
时间:
2016-4-10 15:57
static修饰的成员变量会随着类的加载而加载,并且只有一个
作者:
丶半度微凉
时间:
2016-4-10 16:25
static修饰的成员变量是共享的
作者:
ttkuaile
时间:
2016-4-10 16:29
静态修饰符
作者:
哦哈哟
时间:
2016-4-10 17:18
静态成员和静态方法只有方法区中,不是存在堆内存当中的,是被所有的对象共用的,所以你修改country只是修改了方法区中country,而堆内存引用的对象没有country属性。相对name就再堆内存中,name所修改的是this.name,this指的是name所属的对象。
作者:
董改名
时间:
2016-4-10 19:25
学到了static的一个知识点
作者:
forplay
时间:
2016-4-10 19:36
楼上都解释的很清楚了。
作者:
qing31657552
时间:
2016-4-10 22:49
楼上正解,把static 去了吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2