反射
Class c =Class.forName("线程.User");
Field[] fs =c.getDeclaredFields();
StringBuffer s =new StringBuffer();
s.append(Modifier.toString(c.getModifiers())+" class "+c.getSimpleName()+"{\n");
for(Field fid :fs) {
s.append("\t");
s.append(Modifier.toString(fid.getModifiers())+" ");
s.append(fid.getType().getSimpleName()+" ");
s.append(fid.getName()+";\n");
}
s.append("}");
System.out.println(s);
Field f =c.getDeclaredField("id");
Object o =c.newInstance();
f.setAccessible(true);
f.set(o, "250");
System.out.println(f.get(o));
防止反射调用
private static demo01 s;
private demo01() {
if(s!=null) {
throw new RuntimeException();
}
}
public static synchronized demo01 danli() {
if(s==null) {
s =new demo01();
}
return s;
}
test类中测试
Class<demo01> clazz =(Class<demo01>)Class.forName("反射.demo01");
Constructor<demo01> c =clazz.getDeclaredConstructor(null);
c.setAccessible(true);
demo01 d =c.newInstance();
demo01 dd =c.newInstance();
System.out.println(d);
System.out.println(dd);