一,本章目标
使用反射调用类中的指定方法
使用反射完成setter和getter方法的调用
使用反射直接操作类中的属性
使用反射操作数组
二,具体内容
2.1通过反射调用类中的方法
正常情况下,一个类的对象产生后就可以直接调用类的方法。如果想调用的话,则肯定必须清楚地知道要调用的方法名字是什么,之后通过Class类中的
public Method getMethod() 方法得到一个方法的MMethod对象,之后通过此Method对象执行方法,但是在方法调用的手会牵扯到参数问题,所以使用getMethod方法的时候必须指定好参数。
实例操作:调用Person类中的sayChina方法(使用Method类中的invoke方法可以执行方法)
如果方法中存在参数,则必须设置参数类型。
2.2 调用setter和getter
setter和getter方法是一个标准的属性访问方法,如果一个类的属性被封装,则必须通过setter和getter方法来设置和获取,实际上此方法之所以被这样规定,主要是因为由于反射机制可以给予支持,通过反射调用setter和getter。
2.3 操作属性
操作一个类,可以通过Field类来操作。
public Field getField() - -----------》得到公共属性
public Field getDeclareField --------------->得到本类属性
public Object get() -----------》取得属性
public Object set() --------------》设置属性内容
在访问私有化属性的时候,必须设置这个属性可见
public void setAccessible(boolean flag)throws SecurityException
将其内容设置为true。
以上的操作不需要setter和getter方法制成,即使没有这两个方法, 也能完成功能。
2.3通过反射操作数组
反射机制不光可以使用在类上,也可以使用在任意的引用数据类型上。
Class类中存在一个方法:public Class<?> getComponentType() 返回一个数组
public static Object get(Object array,int index) 得到数组指定下标的内容
public static void set(Object arrya,int index) 修改指定下标的内容
public static Object newInstance(Class<?> componetnTyep,int . . . dimensions) 开辟新数组
操作实例:
取得数组信息并修改数组内容:
使用Array可以修改数组的大小。修改实际上是创建,创建一个新的数组,把久的内容拷贝到新数组中。
三,总结
重点理解set和get方法的调用问题,原理
不建议直接使用反射修改属性