Java中反射机制

反射概述
  • Java反射机制在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。
  • 对于任意一个对象,如果通过反射获取到该类的字节码文件,都能够调用它的任意一个方法和属性。
  • 这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

获取某类字节码文件对象的3种方式:

1、源文件阶段 Person.java

Class clazz = Class.forName("全类名(包名.类名)");

作用:读取配置文件。

2、字节码阶段 Person.class

Class clazz = Person.class

作用:当做静态方法的锁对象。

3、创建对象阶段

Person p = new Person();
Class clazz = p.getClass();

作用:反向获取类的字节码文件,用来比较两个对象是否是同一个字节码对象。(注意:只要元素类型与维度一样,就是同一个class)

反射机制在实际应用中有什么作用?

  在实际开发中,我们需要把一个包中的类 new 出来,但是这个包中的类总是需要变动,那么怎么办,难道总是修改 main 方法中 xxx = new xxx() 吗?这样无疑是麻烦的。而运用反射。我们可以相应的增加一个配置文件,在里面记录包中所有的类名,包中类增加时就加一个类名,删除时就删除一个类名。让main方法去读取这个配置文件中的类名,通过反射获得实例,完全不用我们去修改main方法中的代码。

  反射还有什么用那?他甚至可以修改其他类中的私有属性。android开发中,我们需要改变一个私有标志位的时候,android源码并没有提供set方法,我们又不能改变源码,怎么办,反射可以完美解决这个问题。

  说了这么多,那么我们的开发中,为什么不全部都用反射那?一个原因,开销,它的开销是什么昂贵的,所以尽量在最需要的地方使用反射。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值