反射

反射

原理如下:
在这里插入图片描述
获取Class对象的三种⽅式:

1.通过类名.class获取;
2. 通过Object类的成员⽅法getClass()⽅法获取;
3.通过Class.forName(“全限定类名”)⽅法获取;

获取Class对象的信息:
1.String getSimpleName(); 获得简单类名,只是类名,没有包
2.String getName(); 获取完整类名,包含包名+类名

获取Class对象的Constructor信息

  1. Constructor getConstructor(Class… parameterTypes)
    根据参数类型获取构造⽅法对象,只能获得public修饰的构造⽅法。
    如果不存在对应的构造⽅法,则会抛出 java.lang.NoSuchMethodException 异常。

  2. Constructor getDeclaredConstructor(Class… parameterTypes)
    根据参数类型获取构造⽅法对象,包括private修饰的构造⽅法。
    如果不存在对应的构造⽅法,则会抛出 java.lang.NoSuchMethodException 异常。

  3. Constructor[] getConstructors()
    获取所有的public修饰的构造⽅法

  4. Constructor[] getDeclaredConstructors()
    获取所有构造⽅法,包括privat修饰的

Constructor类中常⽤⽅法

  1. T newInstance(Object… initargs)
    根据指定参数创建对象。
  2. void setAccessible(true)
    暴⼒反射,设置为可以直接访问私有类型的构造⽅法。

获取Class对象的Method信息

  1. Method getMethod(“⽅法名”, ⽅法的参数类型… 类型)
    根据⽅法名和参数类型获得⼀个⽅法对象,只能是获取public修饰的

  2. Method getDeclaredMethod(“⽅法名”, ⽅法的参数类型… 类型)
    根据⽅法名和参数类型获得⼀个⽅法对象,包括private修饰的

  3. Method[] getMethods()
    获取所有的public修饰的成员⽅法,包括⽗类中。

  4. Method[] getDeclaredMethods()
    获取当前类中所有的⽅法,包含私有的,不包括⽗类中。

Method类中常⽤⽅法

  1. Object invoke(Object obj, Object… args)
    根据参数args调⽤对象obj的该成员⽅法
    如果obj=null,则表示该⽅法是静态⽅法

  2. void setAccessible(boolean flag)
    暴⼒反射,设置为可以直接调⽤私有修饰的成员⽅法;

获取Class对象的Field信息
Field是属性类,类中的每⼀个属性(成员变量)都是Field的对象,通过Field对象可以给对应的成员变量赋
值和取值。

  1. Field getDeclaredField(String name)
    根据属性名获得属性对象,包括private修饰的

  2. Field getField(String name)
    根据属性名获得属性对象,只能获取public修饰的

  3. Field[] getFields()
    获取所有的public修饰的属性对象,返回数组。

  4. Field[] getDeclaredFields()
    获取所有的属性对象,包括private修饰的,返回数组。

Field类中常⽤⽅法

void set(Object obj, Object value)
void setInt(Object obj, int i)
void setLong(Object obj, long l)
void setBoolean(Object obj, boolean z)
void setDouble(Object obj, double d)
Object get(Object obj)
int getInt(Object obj)
long getLong(Object obj)
boolean getBoolean(Object ob)
double getDouble(Object obj)
void setAccessible(true);暴⼒反射,设置为可以直接访问私有类型的属性。
Class getType(); 获取属性的类型,返回Class对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值