public class testString {
private static testString s = new testString(); private static int i; private static int j=0; public testString() {
System.out.println("i="+i+" "+"j="+j);
i++;
j++;
System.out.println("i="+i+" "+"j="+j);
} public static testString getInstance() {
return s;
} public static void main(String[] args) {
testString s = testString.getInstance();
System.out.println("==s===" + s.s);
System.out.println("=====i======" + i);
System.out.println("=====j======" + j);
}
}
private static testString s = new testString(); private static int i; private static int j=0; public testString() {
System.out.println("i="+i+" "+"j="+j);
i++;
j++;
System.out.println("i="+i+" "+"j="+j);
} public static testString getInstance() {
return s;
} public static void main(String[] args) {
testString s = testString.getInstance();
System.out.println("==s===" + s.s);
System.out.println("=====i======" + i);
System.out.println("=====j======" + j);
}
}
------------------------------------------------------
关键是这三行的顺序,这里也是顺序执行的,
构造函数执行完后,private static int j=0,又一次把j的值置成0了private static testString s = new testString();
这句应放在最后
载入类的时候,运行时先初使化testString的s instance,在初使化s时调用了testString的构造函数,这个时候i = 1,j = 1.而后执行private static int i及private static int j=0.实际上,i和j在之前已经初使化了。在执行private static int i时没有更改i的值,而执行private static int j=0时相当于执行了一次j=0的操作。所以最终结果为i=1,j=0.
private static String s = "1";
public static void main(String[] args) {
DateTest d1 = new DateTest();
DateTest.s = "aa";
DateTest d2 = new DateTest();
d2.s = "bb";
DateTest d3 = new DateTest();
d3.s="cc"; System.out.println(d1.s);
System.out.println(d2.s);
System.out.println(d3.s);
}
}看这个例子,正如1楼说的那样,静态变量是属于类的.所有此类的对象共用