2 luke003 luke003 于 2016.01.30 21:37 提问

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

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
learningcoding   2016.01.30 22:56
已采纳

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

xyz347
xyz347   2016.01.30 22:07

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

fk002008
fk002008   2016.01.31 00:50

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

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

peiyuanxin
peiyuanxin   2016.01.31 10:21

百度看看static

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!