1,什么是Java反射机制?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为Java的反射机制。
2,反射的使用方法:
假设有个类Person:
package com.gch;
class Person{}
获取类对象的方法:
1.1 Person.class;
1.2 Class.forName("com.gch.Person");
1.3 new Person().getClass();
区别是方法一不执行静态块和动态构造块,方法二执行静态块、不执行动态构造块,方法三需要创建对象,静态块和动态构造块均会执行;
获取类对象之后,便可以获取class对象的属性、方法、构造函数。
获得Class对象后,可以获取Constructor构造器对象,再通过构造器的newInstance()创建你需要的对象。
3,反射和new的区别:
1,new出来的对象我们无法访问其中的私有属性,但是通过反射出来的对象我们可以通过setAccessible()方法来访问其中的私有属性。
2,在使用new创建一个对象实例的时候必须知道类名,但是通过反射创建对象有时候不需要知道类名也可以。因为动态代理不需要类名便可以动态的调用方法。
4,反射的使用场景:
- 加载数据库驱动,Class.forName("com.mysql.jdbc.Driver");
- Spring框架,加载Bean
- 动态代理