浅谈Java反射

228 阅读2分钟

「这是我参与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反射在很多框架以及类中都有使用到,用的好的话可以极大的增加我们代码的灵活性,当然如果用的不好的话会消耗系统性能,增加代码复杂性。