乐趣区

关于java:反射

反射

 就是通过反射技术, 底层(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(实例, 值); 为指定实例的变量赋值,动态变量,第一参数给 null
f.get(实例); 拜访指定实例的变量的值,动态变量,第一参数给 null
Method m = c.getDeclaredMethod(办法名, 参数类型列表);
m.setAccessible(true) ; 使公有办法容许被调用
m.invoke(实例, 参数数据) ; 让指定的实例来执行该办法 

留神点

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




退出移动版