反射
反射:在编译期并不清楚应该加载那个类,类的加载在运行期间进行的,通
过反射可以类进行加载、探知、自审。
获取Class的方式
1.对象.getClass
2.类名.class
3.Class.forName(“类的全路径”);
//第一种
Class c1 = ManBean.class;
//第二种
ManBean m1 = null;
Class c2 = m1.getClass();
//第三种
Class c3 = Class.forName("com.s1_21.ManBean");
反射中常用的方法
newInstance(),获取某个class文件对应的真实对象。(调用某个类的空参构造器)
Class类中提供的获取class文件中成员分成2类:
1、获取类中公开的成员 getXxxxxx 获取到的是公开的成员
2、获取类中私有的成员 getDeclaredXxxxxx 获取到指定的私有的成员
调用类中的私有方法需要取消权限检查,使用Constructor类中的 setAccessible()方法,参数为true
//反射私有的构造方法 ,次方法需要传入一个in型t变量和String型变量
Constructor cons = clazz.getDeclaredConstructor(int.class , String.class);
//取消权限的检查
cons.setAccessible(true);
反射成员变量
反射成员变量:
在一个类中可以有多个同类型,不同名称的成员变量
* 而这些成员变量都需要根据变量的名称进行区分
Field getField(String name)
String name 反射的变量的名称
返回值Field 反射到的具体的那个成员变量对象
反射私有的成员变量需要取消权限检查