本文主要讲解反射的相关知识
一.获取类对象
getClass()
,class()
,forName()
1.获取类对象可以使用以下三种方法
- 对象名调用getClass()方法
- 类名调用class()方法
- Class调用forName()方法,参数是类所在的文件相对路径
例子:Peo类
|
|
方法调用
|
|
二.获取类的构造方法
getConstructors()
、getDeclaredConstructors()
、getConstructor()
、getDeclaredConstructor()
1.获取类的多个构造方法
- 类对象调用getConstructors()方法
获取多个public修饰的构造方法
- 类对象调用getDeclaredConstructors()方法
获取多个public、protected、private、和default修饰的构造方法
|
|
打印结果
|
|
根据结果,getConstructors()方法,返回的是public修饰的构造方法,getDeclaredConstructors()返回的是public、protected、private、和default的构造方法
2.获取指定的无参构造方法
- 类对象调用getConstructor()方法
获取无参构造方法
|
|
打印结果
|
|
3.获取指定的有参构造方法
- 类对象调用getDeclaredConstructor(对应参数类型的类对象)方法
获取有参构造方法
|
|
打印结果
|
|
注意:当构造方法是public修饰,使用getConstructor()或getDeclaredConstructor()都可以,其他修饰符,使用getDeclaredConstructor()获取构造方法,如果构造方法参数是int
,方法中的参数为int.class
,如果构造方法参数是String
,方法中的参数为String.class
,如果构造方法是public Peo(String name, int age, double heigth, double weight)
,
调用示例为:getDeclaredConstructor(“String.class, int.class, double.class, double.class
“)
三.获取类的方法
getMethods()
、getDeclaredMethods()
、getMethod()
、getDeclaredMethod()
1.获取类的多个方法
- 类对象调用getMethods()方法
获取多个public修饰的方法、继承类的public修饰的方法和该类所实现接口的方法
- 类对象调用getDeclaredMethods()方法
获取多个public、protect、private、default修饰的方法和该类所实现接口的方法
|
|
打印结果
|
|
根据结果,Peo类继承Object, 所以getMethods()方法,返回的是public修饰的方法以及Object类中的方法, declaredMethods()返回的是public、private、protected和default修饰的方法以及该类所实现接口的方法,不返回继承类的方法.
2.获取指定的无参方法
- 类对象调用getMethod(“方法名”)方法
获取无参方法,双引号中为方法名
|
|
打印结果
|
|
3.获取指定的有参方法
- 类对象调用getMethod(“方法名”,对应参数类型的类对象)方法
获取有参方法,双引号中为方法名
|
|
打印结果
|
|
四.获取类的成员变量
getFields()
、getDeclaredFields()
、getField()
、getDeclaredField()
1.获取类的多个成员变量
- 类对象调用getFields()方法
获取多个public修饰的成员变量
- 类对象调用getDeclaredFields()方法
获取多个public、protect、private、default修饰的成员变量
|
|
打印结果
|
|
根据结果,getFields()方法,返回的是public修饰的成员变量, declaredFields()返回的是public、private、protected和default修饰的成员变量.
2.获取指定的成员变量
- 类对象调用getField(“成员变量名”)方法
获取指定的public修饰的成员变量
|
|
打印结果
|
|
3.获取指定的成员变量
- 类对象调用getDeclaredgetField(“成员变量名”)方法
获取指定的public、protect、private、default修饰的成员变量
|
|
打印结果
|
|
注意:当成员变量是public修饰,使用getgetField()或getDeclaredgetField()都可以,其他修饰符,使用getDeclaredgetField()获成员变量