这是我面试遇到的一道题,题目如下:
1 public class StaticTest { 2 private static int b = 1; 3 private int a = 1; 4 5 public static void main(String[] args) { 6 StaticTest a1 = new StaticTest(); 7 StaticTest a2 = new StaticTest(); 8 a1.a = a1.a+1; 9 a2.a = a2.a+1; 10 System.out.println("a1.a="+a1.a); 11 System.out.println("a2.a="+a2.a); 12 13 StaticTest b1 = new StaticTest(); 14 StaticTest b2 = new StaticTest(); 15 b1.b = b1.b+1; 16 b2.b = b2.b+1; 17 System.out.println("b1.b="+b1.b); 18 System.out.println("b2.b="+b2.b); 19 } 20 }
这道题考察的是静态变量和动态变量的区别,答案是2,2 3,3。
对于a的值是2,是毫无疑问的。
b在这里有static修饰,说明b是静态变量,可以直接StaticTest.b来调用,a需要new出StaticTest 对象来调用。
b随着类的加载而存在,随着类的消失而消失;a随着对象的创建而存在,随着对象被回收而释放
- b1.b = b1.b+1:这一步计算得出b=2
- b2.b = b2.b+1;因为StaticTest一直存在,所以此时b的值为2,最终b的值为2+1