A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 122125241 中级黑马   /  2015-7-5 22:34  /  504 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package it.cast;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Method;
  5. /*
  6. * 类加载器是专门加载类而存在的
  7. * 根类加载器    扩展类加载器    系统类加载器
  8. * 虚拟机调用根类加载器和扩展类加载器.在我们运行自己写的系统类加载器时
  9. * 反射:
  10. * */
  11. public class Demo {
  12.         /**
  13.          * @param args
  14.          */
  15.         public static void main(String[] args) throws Exception {
  16.                 // 三种方法创建类自解码文件对象
  17.                 Class<? extends Student> c2 = new Student().getClass();
  18.                 Class<?> c1 = Class.forName("it.cast.Student");
  19.                 Class<?> c = Student.class;
  20.                 System.out.println("--------------------------------------");
  21.                 // 获取该类公共的单个构造方法与多个构造方法
  22.                 Constructor<?> constructor2 = c.getConstructor();
  23.                 Constructor<?>[] constructors = c.getConstructors();
  24.                 // 获取该类所有的单个构造方法或者多个构造方法
  25.                 Constructor<?> declaredConstructor = c.getDeclaredConstructor();
  26.                 Constructor<?>[] declaredConstructors = c.getDeclaredConstructors();
  27.                 System.out.println("--------------------------------------");
  28.                 // 通过任意一个构造方法创造对象实例化
  29.                 Object newInstance = constructor2.newInstance();
  30.                 System.out.println("--------------------------------------");   
  31.                 // 获取该类的公共的多个成员变量
  32.                 Field[] fields = c.getFields();
  33.                 // 获取该类所有的成员变量
  34.                 // c.getDeclaredField(name);
  35.                 Field[] declaredFields = c.getDeclaredFields();
  36.                 // 获取单个成员变量的对象并赋值
  37.                 // 公共的变量直接赋值
  38.                 Field field = c.getField("a");
  39.                 //念法(给newInstance对象的field成员变量赋值为22)
  40.                 field.set(newInstance, 22);
  41.                 // 私有变量赋值
  42.                 Field field2 = c.getDeclaredField("name");
  43.                 field2.setAccessible(true);
  44.                 field2.set(newInstance, "张三");
  45.                 Field field3 = c.getDeclaredField("age");
  46.                 field3.setAccessible(true);
  47.                 field3.set(newInstance, 32);
  48.                
  49.                 System.out.println("--------------------------------------");
  50.                 //获取所有的方法
  51.                 Method[] methods = c.getMethods();//这个获取自己的和父类的所有方法
  52.                 Method[] methods2 = c.getDeclaredMethods();//获取自己的方法
  53.                 for (Method method : methods2) {
  54.                         System.out.println(method);
  55.                 }
  56.                 //获取单个方法并调用
  57.                 Method method = c.getMethod("setAge",int.class);
  58.                 method.setAccessible(true);
  59.                 method.invoke(newInstance, 200);
  60.                 System.out.println(newInstance);
  61.                
  62.         }
  63. }
复制代码


2 个回复

倒序浏览
6666666666
回复 使用道具 举报
分线快乐,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马