java是一门先编译再运行的语言
java文件-->class文件-->JVM运行
反射技术-->
通过反射将class字节码预先加载进内存
(返回类型为Class对象),该对象记录了加载进内存的字节码文件信息
方法1:通过全类名加载
Class.forName(全类名);
方法2:通过类名获取
类名.class
方法3:通过该类的对象获取
对象名.getClass()
获取到Class对象后,就可以使用其方法获得该类的各种属性、方法、构造函数
【Class对象.】的意思是指,下面的方法由一个确切类的class对象进行调用
获得属性:
Class对象.
getFields()
getField(属性名) 前两个只能获得public的
getDeclaredFields();
getDeclaredField(属性名)
得到的是一个Field对象(或数组),可使用setAccessible(true);来忽略权限检查,暴力反射
使用get(对象),来获取对象的相关值
使用set(对象,值)来设置对象的相关值
获得构造方法:
Class对象.
getConstructors();
getConstructor(参数的Class对象);
得到的是一个Constructor对象或数组,可以使用newInstance方法来创建对象
构造器名.newInstance(参数列表)
如果是无参的构造方法
可以使用Class对象的newInstance()方法直接创建对象
获得方法:
Class对象.
getMethods();
getMethod(方法名);
得到的是一个Method对象或数组,可以使用getName()方法获得函数名,使用invoke方法来执行
Method对象.invoke(执行方法对象[静态方法可以为null],参数列表);