实践是最好的学习方法,光看理论的话,很容易忘,实践一下比较好理解,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。
一、了解一些概念:
1)java反射功能包含:
- 可以判断运行时对象所属的类
- 可以判断运行时对象所具有的成员变量和方法
- 通过反射甚至可以调用到private的方法
- 生成动态代理
2) 实现Java反射的类:
- Class:它表示正在运行的Java应用程序中的类和接口
- Field:提供有关类或接口的属性信息,以及对它的动态访问权限
- Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
- Method:提供关于类或接口中某个方法信息
注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)都需要它来实现
3)编写Java反射程序的步骤:
- 必须首先获取一个类的Class对象
例如:
Class c1 = Test.class;
Class c2 = Class.forName(“com.reflection.Test”);
Class c3 = new Test().getClass(); - 然后分别调用Class对象中的方法来获取一个类的属性/方法/构造方法的结构
二、实例
1.调用Class对象中的方法来获取一个类的属性/方法/构造方法
定义一个User类
|
|
输出结果如下:
|
|
2.通过Class实例化其他类的对象
1)通过无参构造实例化对象
|
|
输出结果如下:
但是注意一下,当我们把User中的默认的无参构造函数取消的时候,比如自己定义只定义一个有参数的构造函数之后,会出现错误:
所以大家以后再编写使用Class实例化其他类的对象的时候,一定要自己定义无参的构造函数
2)通过有参构造实例化对象
输出入下:
3)通过反射调用方法
输出结果如下:
4)通过反射操作属性
|
|
输出结果如下: