反射--反射机制的深入研究

来源:互联网 发布:健身器材什么牌子 知乎 编辑:程序博客网 时间:2024/05/21 11:01

一,本章目标

使用反射调用类中的指定方法

使用反射完成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方法的调用问题,原理

不建议直接使用反射修改属性



原创粉丝点击