Java反射
什么是反射?
:
- 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。
反射的作用
:
- ①获取一个类里面所有的信息,获取到之后,在执行其它业务逻辑。
- ②结合配置文件,动态创建对象并调用。
1. 获取class对象的三种方式
- ①
Class.forName("全类名");
- 最常用
- ②
类型.class
- 常作为参数进行传递
- ③
对象.getClass();
- 当有了这个类的对象时才可以使用
/** * @author .29. * @create 2023-10-20 21:36 */ public class reflectDemo { public static void main(String[] args) throws ClassNotFoundException { //Student类是一个自定义的JavaBean类 //1. Class.forName("全类名") Class clazz1 = Class.forName("com.haojin.myReflect.Student"); //2. 类名.class Class clazz2 = Student.class; //3. 对象.getClass() Student student = new Student(); Class clazz3 = student.getClass(); //获取到的class对象,都是一致的 System.out.println(clazz1 == clazz2); //true System.out.println(clazz2 == clazz3); //true } }
2. 反射 - 获取构造方法
Class类中用于获取构造方法的方法
:
Constructor<?>[] getConstructors()
:返回所有公共构造方法对象的数组。Constructor<?>[] getDeclaredConstructors()
:返回所有构造方法对象的数组。Constructor<T> getConstructor(Class<?>... parameterTypes)
:返回单个公共构造方法的对象。Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
:返回单个构造方法的对象。
Constructor类中用于创建对象的方法
:
T newInstance(Object... initargs)
:根据指定的构造方法创建对象。setAccessible(boolean flag)
:设置为true,表示取消访问检查。
3. 反射 - 获取成员变量
Class类中用于获取成员变量的方法
:
Field[] getFields()
:返回所有公共成员变量对象的数组。Field[] getDeclaredFields()
:返回所有成员变量对象的数组。Field getField(String name)
:返回放个公共成员变量对象。Field getDeclaredField(String name)
:返回单个成员变量对象。
Field类中用于创建对象的方法
:
void set(Object obj,Object value)
:为成员变量赋值。Object get(Object obj)
:获取成员变量的值。
4. 反射 - 获取成员方法
Class类中用于获取成员方法的方法
:
Method[] getMethods()
:返回所有公共成员方法对象的数组,包含继承的。Method[] getDeclaredMethods()
:返回所有成员方法对象的数组,不包括继承的。Method getMethod(String name,Class<?>... parameterTypes)
:返回单个公共成员方法对象。Method getDeclaredMethod(String,Class<?>... parameterTypes)
:返回放个成员方法对象
Method类中用于创建对象的方法
:
Object invoke(Object obj,Object...args)
:运行方法。
- 参数一:用obj对象调用该方法。
- 参数二:调用方法时传递的参数(没有可以不写)
- 返回值:方法的返回值(没有可以不写)