大家先看两个例子:
(1)
1 public classSingleTon {2 public static intcount1;3 public static int count2 = 1;4 private static SingleTon singleTon = newSingleTon();5
6 privateSingleTon() {7 count1++;8 count2++;9 }10
11 public staticSingleTon getInstance() {12 returnsingleTon;13 }14 }15
16 classTest {17 public static voidmain(String[] args) {18 SingleTon singleTon =SingleTon.getInstance();19 System.out.println("count1=" +singleTon.count1);20 System.out.println("count2=" +singleTon.count2);21 }22 }View Code
输出
count1=1
count2=2
(2)
public class SingleTon {
private static SingleTon singleTon = new SingleTon();
public static int count1;
public static int count2 = 1;
private SingleTon() {
count1++;
count2++;
}
public static SingleTon getInstance() {
return singleTon;
}
}
class Test {
public static void main(String[] args) {
SingleTon singleTon = SingleTon.getInstance();
System.out.println("count1=" + singleTon.count1);
System.out.println("count2=" + singleTon.count2);
}
}
输出:
count1=1
count2=1
在调用类静态成员(不管是方法还是变量)的时候,按顺序初始化静态属性和代码块,之后才会调用静态方法,非静态成员变量因为没有初始化类,故不会初始化。