-
反射可以调用私有结构,具有动态性
-
反射获取类对象的四种方法
-
//通过类的属性 Class
clazz = P.class;
-
//通过运行时类的对象 P p = new P(); Class clazz = p.getClass();
-
//通过forName静态方法 Class clazz = Class.forName("x.y.z.P"); -
//类的加载器 ClassLoader cl = 当前类.class.getClassLoader(); Class clazz = cl.loadClass("x.y.z.P");
-
-
创建对象实例
//调用空参构造器 访问权限足够 通常为public P p = clazz.newInstance();
-
空参构造器作用:①便于子类继承父类super默认调用空参构造器②便于反射创建运行时类的对象
-
获取属性
-
getFields //public Field[] = getDeclaredFields //不包含父类
-
Field方法
getModifiers getType getName
-
-
获取方法
-
Method[] = getMethods getDeclaredMethods //不包含父类
-
Method方法
Method getAnnotations getModifiers getReturnType.getName getName getParameterTypes getExceptionTypes
-
-
获取构造器
-
getConstructorsgetDeclaredConstructors
-
-
获取父类
-
getSuperclassgetGenericSuperclass //获取带泛型的父类
-
-
获取接口
-
getInterfaces
-
-
获取包路径
-
getPackage
-
-
获取注解
-
getAnnotations
-
-
调用指定属性
-
getField(name) getDeclaredField(name) setAccessible Field对象.set(对象, 值) Field对象.get(对象)
-
-
调用指定方法
-
getDeclaredMethod(获取方法的名称, 获取的方法的形参列表如String.class) setAccessible invoke(对象, 参数) invoke方法的返回值就是此方法的返回值 默认为object
-
-
调用指定构造器
-
getDeclaredConstructor(形参列表) setAccessible newInstance(参数)
-



