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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王瀛 高级黑马   /  2012-12-24 14:31  /  1156 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想问一下,下面代码的执行结果为什么是
10
20
30
而不是
10
10
0
代码如下:
  1. class Class12
  2. {
  3.         static int a;
  4.         int b;
  5.         public static void main(String[] args)
  6.         {
  7.                 Class12.a=10;
  8.                 Class12 ob1 = new Class12()
  9.                 Class12 ob2 = new Class12();
  10.                 System.out.println(ob1.a);
  11.                 ob1.a = 20;
  12.                 System.out.println(ob2.a);
  13.                 ob2.a = 30;
  14.                 System.out.println(Class12.a);
  15.         }
  16. }
复制代码
谢谢!~

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 yangcong 于 2012-12-24 14:45 编辑

静态变量 a 随着 Class12类的加载而加载,被所对象共享,优先于对象存在的
Class12.a=10     是用类.静态成员给静态变量a赋值为10   所以第一次打印结果是10

然后新建 ob1   ob2两个对象

通过ob1.a=20   给方法区的a赋值20   所以打印结果是20

接下来 通过ob2.a=30   重新给静态变量a赋值为30   所以第三次结果是30


简单来说就是:静态变量a存在于方法区,可以通过 类名.静态成员和对象名.静态成员  两种方法调用,是所有对象所共有的

所以不管哪个对象给静态变量a赋值,其他对象调用的a必然跟着改变


新手,目前基础中,希望对你有所帮助

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
yangcong 发表于 2012-12-24 14:40
静态变量 a 随着 Class12类的加载而加载,被所对象共享,优先于对象存在的
Class12.a=10     是用类.静态成 ...

想问一下,与执行语句的先后顺序有关吗?

语句中先 print(ob1.a)  下一行才ob1.a=20;

语句的先后顺序对这个结果为什么没有影响呢。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马