luke003
luke003
采纳率30%
2016-01-30 13:37 阅读 1.4k
已采纳

小白求助。麻烦帮忙看看给解释解释

package com.imooc;

public class Test{
public static void main(String[] args) {

    T t1 = new T();
    T t2 = new T();

    System.out.println("t1's i ="+t1.i+"\tt1's j="+t2.j);

    System.out.println("t2's i ="+t2.i+"\tt2.s j="+t2.j);
}

}

class T{
static int i = 0;
int j = 0;

T(){
    i++;
    j = 1;
}

}

输出结果是这个:为什么啊?

t1's i =2 t1's j=1
t2's i =2 t2.s j=1

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    learningcoding Yoda_wang 2016-01-30 14:56

    一个变量如果被static 修饰,那么在伴随着类的实例化将在内存中,开辟一个空间用来专门存储该变量。
    特点是 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
    问题中i变量被static修饰当你new t1 的时候 i变成1 new t2时用的是同一个i 所以i在内存中变成2

    点赞 1 评论 复制链接分享
  • xyz347 xyz347 2016-01-30 14:07

    i是静态变量,被所有实例共享

    点赞 1 评论 复制链接分享
  • fk002008 lambda-fk 2016-01-30 16:50

    如果你不理解,那么你暂时可以认为类的定义中如果有这个 static 修饰的属性时,他就是一个 全局变量的概念

    在c中改变全局变量有啥后果你懂得

    点赞 评论 复制链接分享
  • peiyuanxin 慢步前行 2016-01-31 02:21

    百度看看static

    点赞 评论 复制链接分享

相关推荐