黑马程序员技术交流社区

标题: 关于 static 问题 [打印本页]

作者: 532989476    时间: 2014-6-15 20:37
标题: 关于 static 问题
  1. class MyClass{
  2.         static int a;
  3.         int b;
  4. }
  5. public class TestMain{
  6.         public static void main(String args[]){
  7.                 MyClass mc1 = new MyClass();
  8.                 MyClass mc2 = new MyClass();
  9.                 mc1.a = 100;
  10.                 mc1.b = 200;
  11.                 mc2.a = 300;
  12.                 mc2.b = 400;
  13.                 System.out.println(mc1.a);
  14.                 System.out.println(mc1.b);
  15.                 System.out.println(mc2.a);
  16.                 System.out.println(mc2.b);
  17.         }
  18. }
复制代码

请问a的结果为什么是300而不是100呢?
作者: 姿_`态    时间: 2014-6-15 20:50
静态变量存在于方法区,所以他就一个值,不会随着你创建多少对象而改变,第二次赋值第一次的值覆盖了,所以输出的都是300

作者: 18353665932    时间: 2014-6-15 21:12
静态定义的变量,除非是开始的时候就初始化,那样他的值不可在变,而且需要加上final关键字,但是没有final关键字修饰,那么对象调用的时候会覆盖他之前赋予的值,static是分配一个内存空间来存储这个变量,成员变量a是用static声明的,所以按照语句顺序执行后,a的值从100变为300并一直存在下去,结果就是你控制台输出的结果,就是说300进去了,内存中的100必须要出来,所以,最后才会出来最后赋予的那个数值!

作者: 532989476    时间: 2014-6-15 21:19
18353665932 发表于 2014-6-15 21:12
静态定义的变量,除非是开始的时候就初始化,那样他的值不可在变,而且需要加上final关键字,但是没有final ...

嗯嗯,有点了解了,谢啦
作者: Alan_Kwan    时间: 2014-6-15 21:28
一句话:被static修饰的成员变量被所有该类对象所共享。




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