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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

8黑马币
class Demo {
        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);
        }
}


最佳答案

查看完整内容

Person p1 = new Person(); // name = null; // country = "中国"; p1.name = "麦克"; //name = "麦克"; p1.country = "美国"; // country = "美国"; ------country用static修饰相当于“全局变量”(java没有全局变量,我打个比方), ------也就是这个变量不是p1或者p2这对象特有的,他是所有函数共享的 ------类中初始化为"中国",现在赋值"美国",就覆盖掉"中 ...

22 个回复

倒序浏览
                Person p1 = new Person();
//  name = null;
// country = "中国";
                p1.name = "麦克";           
//name = "麦克";   
                p1.country = "美国";
// country = "美国";
------country用static修饰相当于“全局变量”(java没有全局变量,我打个比方),

------也就是这个变量不是p1或者p2这对象特有的,他是所有函数共享的

------类中初始化为
"中国",现在赋值
"美国",就覆盖掉
"中国"的值了

-------如果这时候打印
p1.country,
显示是
"美国"

                Person p2 = new Person();
//  name = null;            
// country = "美国";       -------没有对country赋值过,所以还是"美国"

                p2.name = "红杉";
//name = "红杉";
                p2.country = "韩国";      
//country = "韩国";         -----对country赋值"韩国",p1看到的也是"韩国"


                p1.speak();
                p2.speak();
麦克...韩国
红杉...韩国



回复 使用道具 举报
结果当然是:麦克+中国,红杉+中国啦
回复 使用道具 举报
15281616180 发表于 2016-3-29 13:00
结果当然是:麦克+中国,红杉+中国啦

Sorry,刚起床眼花了

应该都是韩国

国籍用static修饰了,每一次修改,那么Person的每一个对象都会国籍以最后的值为准

如果麦克+美国之后,红杉不修改国籍为韩国,那么红杉也是美国国籍了
回复 使用道具 举报
麦克 韩国 红杉 韩国
country 是静态的,是共享数据
回复 使用道具 举报
本帖最后由 千年白狐 于 2016-3-29 16:11 编辑

输出结果:麦克 韩国,红杉,韩国 ,因为country是全局静态变量,最后修改的值为准,但是static后面加上final国籍都是中国了
回复 使用道具 举报
zhangtaocg 来自手机 中级黑马 2016-3-29 22:01:58
7#
麦克    中国     红杉  中国      因为静态随类的加载而加载。。。
回复 使用道具 举报
6楼正解
回复 使用道具 举报
Static 最大特点是被其他对象所共享,也是可以改变的
回复 使用道具 举报
15281616180 发表于 2016-3-29 13:00
结果当然是:麦克+中国,红杉+中国啦

麦克+韩国,红杉+韩国;
1,因为当你new p1.country的时候他就会访问静态方法区,去覆盖掉(中国).生成是(美国)
2.当你new p2.country的时候他就会访问静态方法区,去覆盖掉(美国).生成是(韩国).
不信可以变换位置检测下.谢谢{:2_30:}
回复 使用道具 举报
麦克...韩国 红杉...韩国
回复 使用道具 举报
陈月华 来自手机 中级黑马 2016-3-30 00:15:55
12#
11楼
麦克...韩国 红杉...韩国
回复 使用道具 举报
麦克...韩国
红杉...韩国
回复 使用道具 举报
Ak-47 中级黑马 2016-3-30 01:21:45
14#
static 静态修饰符,静态变量存储在方法区的静态区中,随着类的加载而加载,优先于对象存在,被类的所有成员共享,通过创建两个不同的对象,但是他们的country都保存在一个地方,先后两次给它赋值,那最后静态区保存的就是最后赋值的,然后输出答应出来,那国家当然都是最后赋值的啊,因为这是大家类中所有成员共享的,而且你没有设置set方法,对象可以直接修改那个值
回复 使用道具 举报
麦克+韩国,红杉+韩国
回复 使用道具 举报
麦克...韩国 红杉...韩国

因为最后给country静态变量的是韩国
回复 使用道具 举报
麦克...韩国
红杉...韩国
country是一个静态成员变量
他不在p1和p2的对象中,其和类一起加载在方法区
p2给其赋值为"韩国"的时候,是在方法区改变成了"韩国"
无论是p1还是p2调用"counry"成员
其结果都是韩国
.....
回复 使用道具 举报
class Demo {
        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);
        }
}

Person 类中 默认初始化值 null 中国 ,所以输出语句中打印的是 null 和 中国

主方法 创建p1对象 ,对name 进行赋值 name=麦克  ,country 虽然是静态的,但是也可以覆盖,country==美国;
   然后主方法创建p2 对象,对name 进行赋值 name=红杉 ,country覆盖 country =韩国;

在主方法调用 p1.speak();时,name 输入 麦克,但是 country是静态的,存在方法区中的静态区,是所有对象的共享数据
回复 使用道具 举报
所以 P1输出的 P2赋值后的country 值,也就是韩国

P1 = 麦克 韩国

P2 创建对象,name赋的值是 红杉 ,country 也就是韩国
回复 使用道具 举报
麦克,韩国         红衫,韩国,静态是所有对象共享,不是每个对象一份,而是所有对象共用一份,任何一个对象对静态的改变都影响其他对象对该变量使用
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马