package classes;
class Cache {
private static boolean initialized = false;
static {
initializeIfNecessary();
}
private static int sum;
public static int getSum() {
initializeIfNecessary();
return sum;
}
private static synchronized void initializeIfNecessary() {
if (!initialized) {
System.out.println("执行过了");
initialized = true;
}
}
}
public class Client {
public static void main(String args[]) {
System.out.println(Cache.getSum());
//test();
}
public static void test() {
int sum = 0;
for (int i = 0; i < 100; i++)
sum += i;
System.out.println(sum);
}
}
/*
* 其实还是类加载的原理:类先进行准备阶段,然后再初始化,准备阶段时将所有 的类变量都初始化为默认值, initialized = false;sum = 0;
* 类初始化先执行 static ,那么第一个就是 static 块里面的值,完后 sum已经加了一圈了,此时 initialized = true 然后再执行initialized = false
* 这里初始化已经结束,然后再执行 getsum(),这里循环又执行了一圈,所以最后的结点就出来 了,此等例子要从头到尾细细分析
*/
经典类初始化例子
最新推荐文章于 2021-12-12 19:12:42 发布