问题描述
- 小白求助。麻烦帮忙看看给解释解释
-
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
解决方案
一个变量如果被static 修饰,那么在伴随着类的实例化将在内存中,开辟一个空间用来专门存储该变量。
特点是 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
问题中i变量被static修饰当你new t1 的时候 i变成1 new t2时用的是同一个i 所以i在内存中变成2
解决方案二:
i是静态变量,被所有实例共享
解决方案三:
如果你不理解,那么你暂时可以认为类的定义中如果有这个 static 修饰的属性时,他就是一个 全局变量的概念
在c中改变全局变量有啥后果你懂得
解决方案四:
百度看看static
时间: 2024-11-18 06:17:08