JAVA反射机制

       所有的框架几乎都是基于反射实现的。反射可以让java拥有访问一个未知对象任意方法或者属性的能力。
获取类对象:任何一个对象的类都是Class类的子类即 对象.getClass()返回的是一个类对象。另一种获取类对象的方法是使用Class.forName("xxxx"),通过传入对象路径,来实例化一个类对象。


       通过调用类对象class.newInstance来创建一个实例对象。


       获取构造函数:可以根据class.getConstructors可以获取类对象的构造函数。
构造函数反射:如果是有参构造的类对象,我们先使用getConstructor获取构造函数,然后通过构造函数c.newInstance(xxx)传入参数来进行对象实例化。


       字段反射:通过类对象class.getFields来获取成员变量(获取所有公有的字段),获取通过class.getDeclaredFields获取成员变量(获取所有的字段(包括私有、受保护、默认的)),返回一个Field对象,我们通过
filed.get(对象o) 方法获取对象o的filed字段的值。如果是私有字段可以使用setAccessible(true);进行暴力反射。
method反射:通过类对象class.getMethods(获取所有的”公有“方法)或者getDeclaredMethods(获取所有的方法,包括私有的)获取类方法,返回Method对象,我们使用method.invoke(对象o)来进行对对象o的反射调用method方法,
返回值即使method方法的返回值。如果是私有方法,使用method.setAccessible(true);暴力反射。
比如apache的BeanUtils组件就是通过反射来完成对象copy的或者属性copy的。比如struts2或者spring的beanfactory就是通过反射来进行对象实例化的。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值