在Java里,无论生成某个类的多少对象,这些对象都会对应于同一个Class对象。
 1、反射有什么用
可以这么说,其实java类的成员变量、方法是不是private没有关系,运用反射就完全可以玩转类的私有变量和私有方法。正是因为反射的这两部分使用才有了hibernate、spring等框架,换言之,没有反射就没有框架!
 (1)运行时判断任意一个对象所属的类
 (2)运行时构造任意一个类的对象
 (3)运行时判断任意一个类所具有成员变量和方法
 (4)运行时调用任意一个对象的方法
 注意:全是运行时,java反射是运行时的行为。
 2、玩转反射
(1)反射修改对象的私有成员变量
//User对象 public class User {     private int id = 1;     private String name = "大胖子";      public String getName() {         return name;     } }  public static void main(String[] args) throws Exception {     Class<?> clazz = User.class;     User user = (User) clazz.newInstance();      Field idField = clazz.getDeclaredField("name");     idField.setAccessible(true); //放开Java对访问修饰符访问控制检查     idField.set(user, new String("小瘦子"));      System.out.println(user.getName()); } 输出结果:小瘦子  
(2)反射调用对象的私有方法
//User对象 public class User {     private int id;          private void setId(int id) {         this.id = id;     }      public int getId() {         return id;     } }  public static void main(String[] args) throws Exception {     Class<?> clazz = User.class;     User user = (User)clazz.newInstance();      Method setIdMethod = clazz.getDeclaredMethod("setId", new Class[]{int.class});      setIdMethod.setAccessible(true); //放开Java对访问修饰符访问控制检查     setIdMethod.invoke(user, new Object[]{1000});      System.out.println(user.getId());  } 输出结果:1000  3、补充
(1)int.class和Integer.class不是一回事。
 (2)反射的其他方法如getDeclaredFields(),查询API