java反射(java.lang.reflect) ---普通单例模式唯一性问题
1. 普通的饱汉式、饿汉式
package org.bighead.test2; public class TestPrivate { private String str = "strPrivate"; private static final TestPrivate TESTPRIVATE = new TestPrivate(); // 饱汉式、饿汉式 private TestPrivate() { super(); System.out.println(str); } public static TestPrivate getInstance(){ return TESTPRIVATE; } public void toPrint(){ System.out.println("私有构造-公开方法--单实例"); } }
反射创建实例、调用方法(实例可访问的)
package org.bighead.test2; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class TestDefaultSub { public static void main(String[] args) { Class<TestPrivate> clazz = TestPrivate.class; try { Constructor<?> constructor = clazz.getDeclaredConstructor(); constructor.setAccessible(true); TestPrivate tp = (TestPrivate) constructor.newInstance(); tp.toPrint(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InstantiationException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (InvocationTargetException e1) { e1.printStackTrace(); } } }
2. 并发也会影响