Java反射的概述
反射:将类或对象的各个部分封装成其它对象,这就是反射机制
反射机制:Java反射机制是在运行状态中,可以获得任意一个类和对象中的属性和方法
Java代码的三个阶段从上图中可以看出一个java对象中有存放数据的三个容器
分别存放成员变量,构造方法,成员方法
解读:Java反射就是可以将任意一个类(字节码文件)或对象,通过它的Class对象。
再将Class对象中的各部分内容映射成一个个Java对象
一.获取Class对象的方式:
Class.forName(“全类名”);//适用于字节码文件,用来加载类
类名.class;//已经导入,但是没有对象
对象.getclass();通过对象属性获得class对象,此方法封装在object类中
二.获取Class对象的使用
获取功能:
获取Class对象中的成员变量们:
Field[] | getFields() //获取所有public修饰的成员变量 |
Field | getField(String name)// 获取指定 public修饰的成员变量 |
Field[] | getDeclaredFields() //获取所有的成员变量,无视权限修饰符 |
Field | getDeclaredField(String name)//获取指定的成员变量,无视修饰符 |
Field对象的set和get方法
Field对象中的setAccessible(true);//暴力反射
获取Class对象中的构造方法们:
Constructor<?>[] | getDeclaredConstructors()//获取多有public修饰的构造方法 |
Constructor<T> | getConstructor(Class<?>... parameterTypes)//获取指定的public修饰的方法 |
Constructor<T> | getDeclaredConstructor(Class<?>... parameterTypes)//获取指定的构造方法 |
Constructor<?>[] | getDeclaredConstructors()//获取所有的构造方法 |
Constructor中的newInstance方法
获取Class对象中的方法
Method[] | getMethods()//获取所有public修饰的方法 |
Method | getMethod(String name, Class<?>... parameterTypes)//获取指定的public修饰的方法 |
Method[] | getDeclaredMethods()获取所有的方法 |
Method | getDeclaredMethod(String name, Class<?>... parameterTypes)获取指定的方法 |
String | getName()//获取方法名称 |
注:getMethods方法是获取Class对象中所有的public修饰的对象,包括父类Object中的方法