代码结构

反射破坏单例模式_开发语言

源码

public class EHan {
private static final EHan INSTANCE = new EHan();

private EHan() {
}

public static EHan getInstance() {
return INSTANCE;
}

public void out() {
System.out.println(this + " : 我的实例方法。");
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Main {
public static void main(String[] args)
throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException {
EHan eHan = EHan.getInstance();
// 反射板破坏单例
Constructor<EHan> declaredConstructor = EHan.class.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
EHan eHan1 = declaredConstructor.newInstance();
System.out.println(eHan == eHan1); // false
eHan.out(); // com.my.shejimoshi.danli.EHan@45ff54e6 : 我的实例方法。
eHan1.out(); // com.my.shejimoshi.danli.EHan@2328c243 : 我的实例方法。
}
}