本文已参与「新人创作礼」活动,一起开启掘金创作之路。
通过反射调用类的完整结构
-
二、通过反射调用类的完整结构
- Field、Method、Constructor、Superclass、Interface、Annotation
-
举例
- 父类:Person
- 子类:Student
- 接口1:Move
- 接口2:Study
- 测试类:Test1
- 输出结果
- 父类:Person
-
全部的构造器
- public Constructor[] getConstructors(),返回此Class对象所表示的类的所有public构造方法
- public Constructor[] getDeclaredConstructors(),返回此Class对象所表示的类声明的所有构造方法
-
Constructor类中方法的调用:
- 取得修饰符:public int getModifiers();
- 取得方法名称:public String getName();
- 取得参数的类型:public Class<?>[] getParameterTypes();
-
举例
- getConstructors();方法
- getDeclaredConstructors();方法
- getConstructors();方法
-
如何用反射的构造方法来创建对象
- Student类的三个构造方法
-
第一类:公有无参构造
- 代码
- 输出
- 代码
-
第二类:公有有参构造
- 代码
- 输出
- 代码
-
第三类:私有有参构造(通过反射强制调用)
- 代码
- 输出
- 代码
-
注意
- getDeclaredConstructor(String.class,int.class),该方法中的参数是class类型,所以参数写为:参数类型.class。
- setAccessible(true),该方法解除私有的封装,接下来便可以对该私有构造强制调用
- Student类的三个构造方法
-
全部的方法Method
- public Method[] getDeclaredMethods();返回此Class对象所表示的类或接口的全部方法
- public Method[] getMethods();返回此Class对象所表示的类或接口的public的方法
-
Method中包含的方法:
- public Class<?> getReturnType()取得全部的返回值
- public Class<?> getParameterType()取得全部的参数
- public int getModifiers()取得修饰符
-
举例
- getDeclaredMethods();和getMethods();方法的使用
- 输出结果(包含了Object父类的方法)
- getDeclaredMethods();和getMethods();方法的使用
-
全部的属性Field
- public Field[] getFields();返回此Class对象所表示的类或接口的public的Field(获取类的公有属性,包含了父类的属性)
- public Field[] getDeclaredFields();返回此Class对象所表示的类或接口的所有的Field(获取本类的(不包括父类的)所有属性,包括私有和公有)
-
Field中包含的方法:
- public int getModifiers();以整型的形式返回此Field的修饰符
- public Class<?> getType;得到Field的属性类型
- public String getName();返回Field的名称
-
举例
- getFields();和getDeclaredFields();方法的使用
- 输出
- getFields();和getDeclaredFields();方法的使用
-
获取类所在的包
- 代码
- 输出
- 代码