1 .需要掌握的留个单词 class 类 constructor 构造 method 方法 field 字段 instance 实例 invoke 执行 2 .一个类(class)的字节码文件的三种获取方式 一: 类名.class 二: 实例.getClass() 三: Class.forName("权限定性类名"); // 方法一 Class clazz1 = Person.class; System.out.println("方法一 : 类名.calss\t\t" + clazz1); // 方法二: Person p = new Person(); Class clazz2 = p.getClass(); System.out.println("方法二:对象.getClass()\t\t" + clazz2); // 方法三: Class clazz3 = Class.forName("cn.itcast.xxx.fanse.Person"); System.out.println("Class.forName('权限定性类名')\t\t" + clazz3); Constractor构造方法的获取以及实例化 (1.)有参数的构造方法 (2.)没有参数的构造方法 // 获取没有参数的构造方法,并且实例化对象 // 获取字节码文件 Class clazz = Person.class; // 创建对象 Object obj = clazz.newInstance(); System.out.println(obj); // 获取有参数的构造方法,并且实例化对象 // 获取字节码文件中的构造 Constructor cons11 = clazz.getConstructor(String.class,int.class,String.class); // 通过构造创建对象,并且传递参数 Object obj1 = cons11.newInstance("张三",18,"打篮球"); System.out.println(obj1); 注意: 对于有参数的构造方法,在获取字节码文件的构造中的参数,int 类型使用 int.class Method的获取及其访问 String 类型 使用 string.class // 获取字节码文件 Class clazz = Class.forName("cn.itcast.xxx.fanse.Person"); // 创建对象 Object obj = clazz.newInstance(); // 获取方法 Method getname = clazz.getMethod("getName"); Method setname = clazz.getMethod("setName", String .class); // 设置参数和获参数 Object set = setname.invoke(obj, "张三"); Object name = getname.invoke(obj); System.out.println(name); 暴力访问 注意: 访问的时候 clazz.getDeclaredxxx 需要设置暴力访问权限 setage.setAccessible(true); 代码演示: // 获取字节码文件 Class clazz = Person.class; // 创建对象 Object obj = clazz.newInstance(); //获取方法 Method setage = clazz.getDeclaredMethod("setAge", int.class); Method getage = clazz.getDeclaredMethod("getAge"); // 设置暴力访问权限 setage.setAccessible(true); getage.setAccessible(true); // 对参数的处理 Object age = setage.invoke(obj,18); Object gage = getage.invoke(obj); System.out.println(gage);
反射的总结及暴力反射的使用
猜你喜欢
转载自blog.csdn.net/wildwolf_001/article/details/79726870
今日推荐
周排行