一、什么是反射?
Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。
通俗点讲:所谓反射其实是获取类的字节码文件,也就是.class文件,那么我们就可以通过Class这个对象进行获取。
二、反射获取的三种方式
1、通过对象.getClass()方法获取Class对象
2、直接通过类获取Class对象
3、通过类的全路径名获取Class对象会抛出一个异常,如果根据类路径找不到这个类那么就会抛出这个异常。
第一种已经创建了对象,那么这个时候就不需要去进行反射了,显得有点多此一举。第二种需要导入类的包,依赖性太强。所以我们一般选中第三种方式。
三、通过反射获取类的构造方法、方法以及属性
1、获取构造方法
getConstructors()获取所有的公用构造方法
getDeclaredConstructors()获取所有构造方法
.getConstructor(null)获得公有无参的构造方法
.getConstructor(new Class[]{String.class,Integer.class})获得公有有参的构造方法
.getDeclaredConstructor(new Class[]{String.class})获得私有有参的构造方法
结果:
2、获取类属性
getFields()获得所有公共字段
getDeclaredFields()获得所有字段(公共的,私有的)
.getConstructor().newInstance();获得构造方法然后实例化
.setAccessible(true);打开私有属性使其可以赋值
结果
-
获取类中的方法
.getMethods();获得所有public修饰的方法
.getDeclaredMethods();获得所有方法
结果
四、总结
看到这里你已经对反射有了一个简单的了解,可以使用反射获取一些属性方法,其实我们平时写代码很少用到反射技术,但是在我们使用的一些主流框架中反射技术应用是非常广泛的,所以学好反射也是非常有必要的。