package test3;
public class Singleton {
static{
System.out.println("Singleton 的静态块");
}
{
System.out.println("Singleton 的普通块");
}
public static String name = "fdsfds";
private String name2 = "fdsfds";
public static class SingletonHolder {
{
System.out.println("SingletonHolder被加载了");
}
static{
System.out.println("static SingletonHolder被加载了");
}
String test = name;
//String test2 = name2
private static final Singleton INSTANCE = new Singleton();
public SingletonHolder(){
System.out.println("============= 我是一个内部类'SingletonHolder' =============");
}
}
public class SingletonHolder2 {
{
System.out.println("SingletonHolder2被加载了");
}
String test = name;
String test2 = name2;
private final Singleton INSTANCE2 = new Singleton();
public SingletonHolder2(){
System.out.println("============= 我是一个内部类'SingletonHolder2' =============");
}
}
// private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
package test3;
import java.lang.reflect.Modifier;
public class TestMain {
public static void main(String[] args) {
try {
Class<Singleton> singleton = (Class<Singleton>)Class.forName("test3.Singleton");
System.out.println(singleton);
//Singleton a = singleton.newInstance();
/*for(Field f:singleton.getDeclaredFields()){
System.out.println(f.get(singleton));
return;
}*/
//singleton.getDeclaringClass()
Class innerClazz[] = singleton.getDeclaredClasses();
for(Class c: innerClazz){
int mod = c.getModifiers();
String modifier = Modifier.toString(mod);
System.out.println(modifier);
if (modifier.contains("static")) {
c.newInstance();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出结果:
Singleton 的静态块
class test3.Singleton
public static
static SingletonHolder被加载了
Singleton 的普通块
SingletonHolder被加载了
============= 我是一个内部类'SingletonHolder' =============
public
在外部类加载的时候,静态内部类并没有被加载进去;
当c.newInstance(); 之后,才加载静态内部类