Java中的反射机制

机制原理

获取Class对象的三种方式

1,Class.forname(“全类名”):将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类
2,类名.class:通过类名的属性class获取
多用于参数的传递
3,对象.getClass():getClass()方法在object类中定义
多用于对象的获取字节码的方式

//1,Class.forName("全类名"),类名前需要完整的包路径,需要异常处理,会因找不到类而报错
Class c1 = Class.forName("hhuc.Person");
//2,类名.class
Class c2 = Person.class;
//3,对象.getClass(),object的子类都有这个方法,返回对象的Class对象
Person p = new Person();
Class c3 = p.getClass();

//内存中每个类的Class对象只有一个,因为类加载器只会加载一次,无论new多少个对象,镜子里的自己都只有一个。下面的比较都是返回true
System.out.println(c1 == c2);
System.out.println(c1 == c3);

获取Class对象后的方法的使用

//注意只能查到public成员变量
Field[] fields = c2.getFields();
for(Field field : fields){
System.out.println(field)
}

getField(String name),获取类的单个field对象

对成员变量操作,注意参数是实例对象,相当于获得实例化的成员变量

getDeclaredField就很厉害了,可以获取所以声明的成员变量包括private,因为在反射中不存在私有,你的就是我的

field对象.setAccessible(true);//暴力反射,直接忽略安全检查,无视权限问题

constructor构造器对象的操作

获取构造器

创建对象

//Class对象中有一个等价无参构造器初始化的方法
object o = c2.newInstance();

Method对象操作

Method对象的获取

方法的执行,invoke传一个实例对象进去就行

参考了某个b站视频后总结,具体地址不记得了 -_-

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值