反射

就是通过反射技术,底层(JVM)能够解析.class文件里的所有数据包含:类里的所有信息,成员变量/办法/构造方法...益处:节俭内存资源

获取反射类对象

class.forName("类的全门路")类名.class对象.getclass()

罕用办法

对象名.getPackage().getName()获取包名对象名.getSimpleName()获取类名对象名.getName()获取残缺类名getFields()取得所有公开的成员变量,包含继承的变量getField(变量名)getDeclaredFields()取得本类定义的成员变量,包含公有,不包含继承的变量getDeclaredField(变量名)getConstructor(参数类型列表)取得公开的构造方法getConstructors()取得所有公开的构造方法           getDeclaredConstructors()暴力取得所有构造方法,包含公有getDeclaredConstructor(参数类型.class)getMethods()取得所有可见的办法,包含继承的办法getMethod(办法名,参数类型列表)getDeclaredMethods()暴力取得本类定义的办法,包含公有,不包含继承的办法getDeclaredMethod(办法名, 参数类型.class)更具办法名和参数类型及其个数主动匹配Class.newInstance() 只可能调用无参的构造函数,即默认的构造函数; Constructor.newInstance() 能够依据传入的参数,调用任意结构构造函数。 c.getConstructor(类型.class); 执行含参结构,获取构造方法c.getDeclaredField(变量名); 获取变量c.setAccessible(true); 使公有成员容许拜访f.set(实例, 值); 为指定实例的变量赋值,动态变量,第一参数给 nullf.get(实例); 拜访指定实例的变量的值,动态变量,第一参数给 nullMethod m = c.getDeclaredMethod(办法名, 参数类型列表);m.setAccessible(true) ;使公有办法容许被调用m.invoke(实例, 参数数据) ;让指定的实例来执行该办法

留神点

当暴力反射时有公有的构造方法时,须要先暴力获取构造方法,完了在实例化