单例能被反射吗?肯定能。

来源:互联网 发布:淘宝旗袍模特 周婷 编辑:程序博客网 时间:2024/05/05 04:44

单例能被反射吗?肯定能。

package com.zkk;public class ElvisModified {private static boolean flag = false;public static boolean getFl(){return flag;}private ElvisModified() {synchronized (ElvisModified.class) {if (flag == false) {flag = !flag;} else {throw new RuntimeException("单例模式被侵犯!");}}}private static class SingletonHolder {private static final ElvisModified INSTANCE = new ElvisModified();}public static ElvisModified getInstance() {return SingletonHolder.INSTANCE;}public void doSomethingElse() {}}

package com.zkk;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Modifier;public class Test3 {/** * @param args */public static void main(String[] args) {try {Class<ElvisModified> classType = ElvisModified.class;Constructor<ElvisModified> c = classType.getDeclaredConstructor(null);c.setAccessible(true);    Field[] fields= ElvisModified.class.getDeclaredFields();    for(Field field:fields){     if(Modifier.isStatic(field.getModifiers())){     System.out.println("字段是:"+field.getName());     field.setAccessible(true);     field.set(null,false);     }         }   // System.out.println("当前static:"+ElvisModified.getFl());    ElvisModified e1 = (ElvisModified) c.newInstance(); Field[] fields2= ElvisModified.class.getDeclaredFields();    for(Field field:fields2){     if(Modifier.isStatic(field.getModifiers())){     System.out.println("字段是:"+field.getName());     field.setAccessible(true);     field.set(null,false);     }         }ElvisModified e2 = ElvisModified.getInstance();System.out.println(e1 == e2);} catch (Exception e) {e.printStackTrace();}}}


























阅读全文
0 0