反射基础
方式一:调用运行时类的属性 .class
Class<Person> p1 = Person.class;
方式二:
Person p=new Person();
Class<? extends Person> p2 = p.getClass();
方式三:
Class<?> p3 = Class.forName("Reflect.Person");
方式四:使用类的加载器
ClassLoader classLoader= ReflectTest.class.getClassLoader();
Class<?> p4 = classLoader.loadClass("preson");
二.通过反射创建运行时类的对象
newInstance(); 使用空参构造器
Person person = p1.newInstance();
三.反射实例的方法
1.获取运行时类的属性
class.getFields() 获取当前运行时类及其父类中声明为public访问权限的属性结构
class.getDeclaredFields() 获取当前运行时类当中获取的所有属性(与权限无关)
getModifiers()获取权限修饰符 返回INT
getType()获取数值类型
getName() 获取变量名
2.获取运行时类的方法结构
class.getMethods()获取当前运行时类及其父类中声明为public访问权限的方法结构
class.getDeclaredMethods()获取当前运行时类当中获取的所有方法(与权限无关)
四.获取指定属性
1.方式一; 权限为public
//获取指定的属性
Field xname = clazz.getField("xname");
//set(object,value)设置属性的值 参数一:运行时类的对象 参数二:赋值
xname.set(o,"fdsaf");
//get(object) 获取当前属性的值
System.out.println(xname.get(o));
2.方法二:
Field id = clazz.getDeclaredField("id");
id.setAccessible(true);//必须设置 保证当前数据是可以访问的
id.set(o,10);
System.out.println(id.get(o));
调用指定的构造器
Constructor<?> constructor = clazz.getDeclaredConstructor(int.class, String.class, int.class);//参数列表为数据类型
constructor.setAccessible(true);
Object tom = constructor.newInstance(20, "tom", 32);
System.out.println(tom);

浙公网安备 33010602011771号