什么是反射?
反射概念:
- 反射就是 把Java类中的 各个成分 映射成一个个的Java对象;
- 在运行状态中,对于任意一个类,都能够知道这个类的所有的 属性和方法;
- 对于任意一个对象,都能调用它的任意一个方法和属性;
这种 动态 获取对象属性及 动态 调用对象方法的功能叫Java的反射机制。
反射的功能:
⭐在运行时构造(获取)任意一个类的对象;
- ⭐在运行时调用任意一个类的对象的 方法;
- 在运行时判断任意一个对象所属的类;
-
实现反射功能的类:
Class
:这个类;Field
:类的成员变量;Method
:类的方法;Constructor
:类的构造方法。
反射存在的必要性:
- 使用
new
相当于在编译时写死了; - 使用 反射 可以在运行时动态获取对象。
反射用法及其实例:
测试对象Student student
获取一个学生的对象的数据类型(此处是Student):
Class studentClass = student.getClass();
获取这个类型中声明的属性们:
Field[] fields = studentClass.getDeclaredFields();
⭐通过反射创建一个对象:
- 获取到这个对象的数据类型;
- 通过
.newInstance()
方法获取一个对象。Object newStudent = studentClass.newInstance(); //需要这个类存在无参构造器
Object newStudent2 = studentClass.getConstructor(String.class ,int.class).newInstance(); //使用类中的构造器获得对象
通过反射来执行类方法:
Method method = studentClass.getMethon("methonName",?); //获取名字叫 methonName 的方法
method.invoke(newStudent); //执行
反射机制的优缺点:
优点:
- 灵活
缺点:
- 无视泛型检查(泛型检查发生在编译时);
- 性能稍差。