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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 532989476 中级黑马   /  2014-6-15 20:37  /  1150 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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呢?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

4 个回复

正序浏览
一句话:被static修饰的成员变量被所有该类对象所共享。
回复 使用道具 举报
18353665932 发表于 2014-6-15 21:12
静态定义的变量,除非是开始的时候就初始化,那样他的值不可在变,而且需要加上final关键字,但是没有final ...

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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
静态变量存在于方法区,所以他就一个值,不会随着你创建多少对象而改变,第二次赋值第一次的值覆盖了,所以输出的都是300

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马