一、调用方法
1、利用反射可以获取类的信息、创建相关对象(如Coustrutcor类、Field类、Method类),在Method里面有一个invoke方法,通过invoke()方法来调用Method对象对应的方法;
Object invoke(Object obj ,Object...args):obj是执行该方法的对象,args是执行该方法时传入该方法的参数。
2、利用反射调用Class对应类中的私有方法时,应该利用setAccessible(Boolean flag)方法,如果flag=true,表示该Method在使用时应该取消Java语言访问权限检查;如果flag=flase,表示该Method在使用时应该实施Java语言访问权限检查。
二、访问属性
通过Class对象的getFields()或getField()方法来获取该类包含的全部公共属性或指定的公共属性,getDeclaredFields()或getDeclaredField()则不受访问权限的限制。于是,利用Field类提供的方法来访问属性:
getX**(Object obj):obj是Class对象对应类的实例对象,通过该方法可以获取obj对象中该属性的属性值。
示例:
Person p=new Person();
nameField.get(p);//表示返回的是引用类型的属性,如String类型的属性。
nameField.getInt(p);
setX**(Object obj,X** val):将obj对象的该属性的值设为参数val
Field.setAccessible(true);访问private访问控制属性。
说明:此处的X**对应的是java的8个基本数据类型,如字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。
应用:在程序需要动态创建摸个类的对象时,才会考虑使用反射,并通过反射来改变类中私有属性的值