JAVA反射机,简单的说就是在程序运行过程中,对于任意一个类、方法和对象,我们都能知道它的信息并且调用;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性。同时,我们可可以通过它来实现对原先无法调用的方法和对象的调用。因此在开发过程中有很重要的作用。那么我们要怎样来使用它呢?
获取类
获取累的对象几乎是所有操作的起始,获取类的方法主要有三种:
- 通过Class类获取
Class personClass=Class.forName("module.Person");//获得class
- 直接获取
Class personClass=Person.class;
- 通过对象获取
Person person=new Person(); Class personClass=person.getClass();
获取构造方法
获取类对象后,我们可以通过它获取它的构造方法
- 获取构造方法数量
1 | personClass.getDeclaredConstructors();// 获取所有的申明构造方法 |
- 获取指定参数的构造方法
personClass.getConstructor(new Class[]{int.class});//获取int参数的构造方法
- 获取构造方法的参数类型
1 | Constructor constructor=personClass.getConstructors()[i];//获取第i个构造方法 |
获取属性
在获取了类之后,我们就可以通过这个类获取它里面的属性。
- 获取属性的数量
personClass.getFields();//获取所有的公开参数
personClass.getDeclaredFields();//获取所有的声明参数
这两个方法的区别是getDeclaredFields()返回Class中所有的字段,包括私有字段,而getFields 只返回公共字段,同时包括父类继承的公开字段。类似的在获取方法、获取注解等。 - 获取指定属性
personClass.getField("gender");
- 修改属性
1 | Person person=new Person(); |
同时如果修改的属性是私有的,我们需要设置field可修改
field.setAccessible(true);
获取方法
- 获取方法数量
1 | personClass.getDeclaredMethods();//获取所有申明的方法 |
- 获取指定到方法
personClass.getDeclaredMethod("setName",String.class);//如果没参数就设置null
- 调用方法
1 | method.setAccessible(true);//设置私有参数和方法可修改 |
获取注解
可以获取注解信息
- 获取类、方法、属性、方法参数的注解
1 | personClass.getAnnotation(DefaultName.class); |
- 获取注解值
((DefaultName)annotation).name();// name为注解方法
java反射的内容还有很多,这里就不再介绍了。