java反射

一.java反射是基于java的类加载机制
jvm在运行某个XXX类时会在堆中建立名为XXX.class的文件对象(一般只此一份
二.java发射的三种实现方式
1.对象获取
new XXX =new XXX();
Class c1 =XXX.getClass();
2.类名获取
Class c2 = XXX.class;
3.class类的静态方法获取(最常用
Class c3 =Class.forName(“全限定名”);
Constructor[] cons = c3.getConstructors();
for(Constructor con:cons){
System.out.print(con);
}
当要获取特定的构造器对象时:
Constructor con = c3.getConstructor(参数列表.class):
con.newInstance(“传入与上一步传入的参数列表一致的参数”);//传入与上一步传入的参数列表一致的参数
注意:XXX类中要有空构造器,以及必须要有public构造器有空构造器就可以快捷进行反射
Class c3 =Class.forName(“全限定名”);
c3.newInstance();
三.暴力反射
通常不会对类的私有化方法进行反射操作,因为可能出现风险。
当然技术上没有难度。
通过Class类的getDeclaredConstructors();可以获取所有构造器方法(包含private的);
获取特定私有构造器方法:
Constructor con = c3.getDeclaredConstructor(参数名.class的列表);
con.setAccessible(true);//取消运行时的检查
四.反射获取成员变量中的成员变量,并改值
Class c3 =Class.forName(“全限定名”);
c3.getFields();//获取的都是public修饰的成员变量
c3.getDeclaredFields();//获取所有成员变量
获取某个public成员变量并改值
Field f = c3.getField(“变量名”);
Object obj = c3.newInstance();
f.set(obj,“修改的值”);
五.反射获取方法
Class c3 =Class.forName(“全限定名”);
Object obj = c3.newInstance();
c3.getMethods(); //获取所有的公共方法
Method m = getMethod(“方法名”,参数.class列表);
//使用Method方法类中的方法,获取到具体方法
m.invoke(obj,实际参数(列表));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值