A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luojian 中级黑马   /  2016-4-10 13:07  /  666 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
}
}

评分

参与人数 1黑马币 +8 收起 理由
forplay + 8 很给力!

查看全部评分

10 个回复

倒序浏览
本帖最后由 grandsun 于 2016-4-10 14:06 编辑

static String country  =  "中国";  
改成String country  =  "中国";  
不然因为country是被static修饰的.所以一次赋值,就会同时被多个对象使用
而且不会随着对象的增多而增多.始终只有一个country的成员变量.
另外static的正确调用方式应该是用类名.也就是这样:Person.country
你第一次改成"美国",就算p2的country不再赋值,也会自动变成"美国"..
如果p2的country也赋值的话,会把之前的"美国给覆盖掉"
所以如果你想要不断改变,并且有不同的country的值.就要把static修饰符去掉.
回复 使用道具 举报
楼上正解,静态修饰符修饰的原因
回复 使用道具 举报
因为static修饰的成员变量有“共用”的意思,就是说被创建一次后,后面的调用都会共用这一个变量,如果前面有改变,就会全部覆盖为改变后的值。楼上的解释已经说得很明白了
回复 使用道具 举报
static修饰的成员变量会随着类的加载而加载,并且只有一个
回复 使用道具 举报
static修饰的成员变量是共享的
回复 使用道具 举报
静态修饰符
回复 使用道具 举报
静态成员和静态方法只有方法区中,不是存在堆内存当中的,是被所有的对象共用的,所以你修改country只是修改了方法区中country,而堆内存引用的对象没有country属性。相对name就再堆内存中,name所修改的是this.name,this指的是name所属的对象。
回复 使用道具 举报
学到了static的一个知识点
回复 使用道具 举报
楼上都解释的很清楚了。
回复 使用道具 举报
楼上正解,把static 去了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马