「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。
引言:之前学习了Java反射,但是没有及时写博客记录,最近学spring框架时候又遇到,就再次记录并巩固一下。
反射
Java反射机制是指在程序的运行过程中可以构造任意一个类的对象、获取任意一个类的成员变量和成员方法、获取任意一个对象所属的类信息、调用任意一个对象的属性和方法。反射机制使得Java具有动态获取程序信息和动态调用对象方法的能力。
Class c = Class.forName("java.lang.String");
反射的调用方法
可以通过以下类调用反射API。
- Class类:可获得类属性方法
- Field类:获得类的成员变量
- Method类:获取类的方法信息
- Construct类:获取类的构造方法等信息
具体如下:
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
反射的优点
反射看起来好像比较复杂,都是创建对象,明明直接可以通过new创建,为什么要用反射呢?简单来说的话就是new一个对象只能在程序还没编译之前进行创建,而反射的话是在java文件编译成.class文件后进行新建对象。
简而言之就是当java文件编译生成.class文件后,如果代码出了问题,需要及时修改,这个时候如果使用的不是反射,那么则需要到代码源文件里面修改,并重新编译,程序比较大的时候会比较麻烦,所以需要反射来进行修改,比如说开始用的是Mysql突然要用Oracle了,这个时候用反射的话只要在运行时候修改配置文件的信息就可以了。
总结
Java反射在很多框架以及类中都有使用到,用的好的话可以极大的增加我们代码的灵活性,当然如果用的不好的话会消耗系统性能,增加代码复杂性。