黑马程序员技术交流社区
标题:
关于静态变量的一段代码
[打印本页]
作者:
王瀛
时间:
2012-12-24 14:31
标题:
关于静态变量的一段代码
想问一下,下面代码的执行结果为什么是
10
20
30
而不是
10
10
0
代码如下:
class Class12
{
static int a;
int b;
public static void main(String[] args)
{
Class12.a=10;
Class12 ob1 = new Class12()
Class12 ob2 = new Class12();
System.out.println(ob1.a);
ob1.a = 20;
System.out.println(ob2.a);
ob2.a = 30;
System.out.println(Class12.a);
}
}
复制代码
谢谢!~
作者:
杨建聪
时间:
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