黑马程序员技术交流社区

标题: 关于静态变量的一段代码 [打印本页]

作者: 王瀛    时间: 2012-12-24 14:31
标题: 关于静态变量的一段代码
想问一下,下面代码的执行结果为什么是
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. }
复制代码
谢谢!~
作者: 杨建聪    时间: 2012-12-24 14:40
本帖最后由 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必然跟着改变


新手,目前基础中,希望对你有所帮助
作者: 王瀛    时间: 2012-12-24 16:37
yangcong 发表于 2012-12-24 14:40
静态变量 a 随着 Class12类的加载而加载,被所对象共享,优先于对象存在的
Class12.a=10     是用类.静态成 ...

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

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

语句的先后顺序对这个结果为什么没有影响呢。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2