文章转载自:载一个类时,其内部类是否同时被加载?引申出单例模式的另一种实现方式
1.实验目的
验证JAVA中类加载的机制,假设类加载一定会执行静态代码块static{}
2.实验代码
class OutterClass{
static {
System.out.println("static block in OutterClass");
}
public static class InnerStaticClassOne{
static {
System.out.println("static block in InnerStaticClassOne");
}
static int i = 1;
}
public static class InnerStaticClassTwo{
static {
System.out.println("static block in InnerStaticClassTwos");
}
public static int get(){
return 2;
}
}
}
public class StaticInnerClassTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("the first pass testing...");
System.out.println("===========================");
System.out.println("the second pass testing...");
System.out.println("i in InnerStaticClassOne is " + OutterClass.InnerStaticClassOne.i);
System.out.println("===========================");
System.out.println("the third pass testing...");
System.out.println("get() in InnerStaticClassOne is " + OutterClass.InnerStaticClassTwo.get());
System.out.println("===========================");
System.out.println("the fourth pass testing...");
OutterClass obj = new OutterClass();
}
}
3.实验结果
the first pass testing...
===========================
the second pass testing...
static block in InnerStaticClassOne
i in InnerStaticClassOne is 1
===========================
the third pass testing...
static block in InnerStaticClassTwos
get() in InnerStaticClassOne is 2
===========================
the fourth pass testing...
static block in OutterClass
4.结果分析
- 触发类加载的条件:构造函数,静态属性,静态方法
- 外部类与内部类加载无必然联系,可以先加载内部类,关键看加载类的触发条件是否满足