Java的反射机制

Java的反射机制

java的反射机制:

Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。

这种在运行时动态的获取信息以及动态调用对象的方法的功能称为 Java 的反射机制

Class 类与 java.lang.reflect 类库,其中常用的类有Constructor,Field,Method类等,AccessibleObject类是前面三个类的基类,主要包含设置安全性检查等方法一起对反射的概念进行了支持。这些类型的对象时由 JVM 在运行时创建的,用以表示未知类里对应的成员。这样你就可以使用 Constructor 创建新的对象,用 get() 和 set() 方法读取和修改与 Field 对象关联的字段,用 invoke() 方法调用与 Method 对象关联的方法。另外,还可以调用 getFields() getMethods() 和 getConstructors() 等很便利的方法,以返回表示字段,方法,以及构造器的对象的数组。这样匿名对象的信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。

获取类对象类:

在类加载的时候,jvm会创建一个class对象

class对象是可以说是反射中最常用的,获取class对象的方式的主要有三种

  1. 根据类名:类名.class
  2. 根据对象:对象.getClass()
  3. 根据全限定类名:Class.forName(全限定类名)
获取构造函数:

Constructor<?>[] constructors = class对象.getConstructors();

Constructor constructor1 = class对象.getConstructor();

Constructor constructor2 = class对象.getConstructor(String.class);

利用构造函数可以获得构造函数的参数数量:

Class<?> parameterTypesClass[] = constructors[i].getParameterTypes();

并可以利用构造函数进行实例化:

constructors[0].newInstance());

获取属性(Filed):

Field fields[] = class对象..getDeclaredFields();

Field fieldUserName = class对象..getDeclaredField("属性名");

//getDeclaredField是可以获取一个类的所有字段.
//getField只能获取类的public 字段.

// 取消安全性检查,设置后才可以获取或者修改private修饰的属性,也可以单独对某个属性进行设置 Field.setAccessible(fields, true);

利用filed自身的方法可获得属性的名字、属性的实例中的值、属性的类型

调用属性的get、set方法:

field.get(对象实例)

field.set(对象实例,“新值”)

获取方法:
Method[] methods = userClass.getDeclaredMethods();

// 取消安全性检查,设置后才可以调用private修饰的方法,也可以单独对某个方法进行设置

Method.setAccessible(methods, true);

利用fMethod自身的方法可获得方法名、方法的返回值。

"方法名:" + method.getName() + " \t返回类型:" + method.getReturnType().getName()

利用invoke调用方法:

Method getMethod = userClass.getDeclaredMethod("getName");`

`getMethod.setAccessible(true);`

`"调用getName方法:" + getMethod.invoke(user)`

`Method setMethod = userClass.getDeclaredMethod("setName", String.class);`

 `setMethod.invoke(user, "韦德")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值