反射的一些简单理解

反射:框架的设计灵魂

java代码在计算机中的三个阶段:
  1. Source源代码阶段
  • 编写到的源代码,一个个的java文件和对象
  1. Class类对象阶段
  • 经过ClassLoadeer类加载器的加载将一个类对象分为三个组成部分
  • 成员变量 Field[] fields
  • 构造方法 Constructor[] cons
  • 成员方法 Method[] method
  1. Runtime运行阶段
  • 在完成类加载之后实际创建对象并运行

反射

  1. 获取对象
  • Class clazz = ClassName.class;
  1. 从获取到的对象进行不同的操作
  • 获取成员变量的操作:
Field[] getFields(); //获取所有的Public修饰的成员变量
Field getField(Strign name); //获取指定名称的public修饰的成员变量
Field getDeclaredFields(); //忽略修饰符的去获取所有的成员变量,但仍不能够对非public变量进行操作
Field getDeclaredField(String name); //指定变量名获取

得到变量的值后可以使用get,set方法进行获取值和设定值的操作。

  • 获取构造方法的操作:
Constructor<T> getConstructor(类<?>... parameterTypes); //通过传入不同的参数获取到不同的构造方法
Object O = ClassName.newInstance(); //直接调用空构造方法是考研直接对获取到的对象操作,以简化操作
获得构造方法之后可以通过newInstance()方法创建一个新的对象。
getDeclaredConstructor方法同上成员变量
  • 获取成员方法的操作:
Method mNmae = ClassName.getMethod();
mNmae.invoke(Object object,参数);// 使用invoke方法对获取到的方法进行运行,需要向方法中传入一个对象,若有参则传入对应的参数

在获取所有方法时,会同时获取到其继承自父类的方法,无继承则自动继承Object类
在获取方法后,运用其方法进行操作

  • 获取类名:
    String getName();//获取方法名也可行
  1. 忽略修饰符权限进行操作,暴力反射
  • 若获取到的变量方法是非public的,则只能得到其名称,而不能对其进行get,set操作

  • 使用setAccessible(true); //暴力反射,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值