反射机制的作用
比如我们现在要修改main函数里面的一个对象
A a=new A();
改成
B b= new B();
我们直接改代码是可以的,但是如果有上百个类似的修改,就十分不方便了
那么就可以用反射机制,不用修改源码,直接修改配置文件即可,也就相当于解耦
现在很多框架比如spring中都是用反射机制。
先了解什么是类对象
类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。
获取类对象
获取类对象有3种方式
- Class.forName(类名)
- 类名.class
- new 类名().getClass()
在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。
反射机制创建对象
与传统的通过new 来获取对象的方式不同
反射机制,会先拿到一个类的“类对象”,然后通过类对象获取“构造器对象”
再通过构造器对象创建一个对象
反射机制访问属性
获得字段用getField和getDeclaredField方法
getField和getDeclaredField的区别
这两个方法都是用于获取字段
getField 只能获取public的,包括从父类继承来的字段。
getDeclaredField 可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。
具体区别可以百度
反射机制调用方法
调用方法使用getMethod方法
getMethod和invoke方法的具体使用就不阐述了,可以查看相关文档
最后
很明显,我们只要知道这个类的名字,就可以对这个类进行一系列的操作
所以我们可以写一个配置文件比如叫 abc.config,在里面写上类的名字和方法
然后在java代码中读取配置文件就可以进行对类的操作,这个是传统new 对象无法实现的。
如果需要修改,也只需修改配置文件即可,就这就反射机制的优势