這是我面試遇到的一道題,題目如下:
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