反射

反射



反射_第1张图片

class


获取class字节码对象的三种方式:

//1、通过类.class


             Class clazz=Hero.class;


//2、通过对象.getClass();


             Hero h=new Hero();

             Class class1=h.getClass();


//3、通过Class.forName()

             Class class2=Class.forName("类名");



Constructor

概念:对构造函数进行封装


//通过无参构造函数,创建一个新的实例对象

Object obj=clazz.newInstance();//相当于调用new

//通过参数个数和类型类确定调用哪个构造函数

Constructor constructor=clazz.getConstructor(String.class);//调用有参构造函数,并且传递参数值Objectobj=constructor.newInstance("郭靖");//相当于调用new


Field

概念:对类中的属性进行封装


Field[] fields1=clazz.getFields();//获取public修饰的属性

Field[] fields2=clazz.getDeclaredFields();//获取所有申明的属性

Field field=clazz.getField("name");//获取public修饰的name属性

Field field2=clazz.getDeclaredField("name");//获取申明过的name属性

field2.setAccessible(true);//设置为可以访问的

field.getModifiers();//获取修饰符

field.getType();//获取类型

field2.set(obj,"lisi");//给属性赋值


内省


Object obj=Hero.class.newInstance();

PropertyDescriptor pd=new PropertyDescriptor("name",Hero.class);//获取Heror中的name属性描述器

Method method=pd.getWriteMethod();//获取该属性的set方法

method.invoke(obj,"lisi");//调用set方法

你可能感兴趣的:(反射)