反射

来源:互联网 发布:淘宝运费险最多赔多少 编辑:程序博客网 时间:2024/06/02 08:42
------------------------------------------------------------------反射------------------------------------
 /**
 * 反射
 * 
 * 类的加载
 * 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
 * 加载
 * 就是指将class文件读入内存,并为之创建一个class对象。
 * 任何类被使用时系统都会建立一个Class对象。
 * 连接
 * 验证是否有正确的内部结构,并和其他类协调一致
 * 准备负责为类的静态成员分配内存,并设置默认初始化值
 * 解析将类的二进制数据中的符号引用替换为直接引用
 * 初始化 就是初始化步骤
 * 
 * 如何获取 Class文件对象
 * 1、通过Object类getClass()方法获取Class对象
 * 2、通过.class方法获取Class对象
 * 3、通过反射的方式,Class.forName(String classname)获取Class对象
 *
 *通过反射获取Class文件中的构造方法
 *
 * 获取指定的构造方法
 * public Constructor<T> getConstructor(Class<?>... ParameterTypes)获取指定的public修饰的构造方法
 * public Constructor<T> getDeclaredConstructor(Class<?>... ParameterTypes)获取指定的构造方法,包含私有的。
 *
 * 获取所有的构造方法
 * public Constructor<?>[] getConstructors() 获取所有的public 修饰的构造方法
 * public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法,包含私有的
 *
 * 通过反射,获取类中的构造方法,并完成对象的创建
 * 步骤:
 * 1.获取字节码文件对象
 * 2.通过字节码文件对象,获取到指定的构造方法
 * getConstructor(参数);
 * 3.通过构造方法,创建对象
 * public T newInstance(Object... initargs)
 *
 * 私有构造方法,创建对象
 * 1.获取字节码文件对象
 * 2.通过字节码文件对象,获取到指定的构造方法
 * getConstructor(参数);
 * 3.暴力访问
 * setAccessible(true);取消java虚拟机对该方法的访问检查机制。
 * 4.通过构造方法,创建对象
 * public T newInstance(Object... initargs);
 *
 *通过反射,获取Class文件中的方法
 * 获取指定的方法
 * public Method getMethod(String name,class<?>... parameterType);
 * 获取指定的public方法
 * public Method getDeclaredMethod(String name,class<?>... parameterType);
 * 获取指定的任意的方法,包含私有的
 * 获取所有的方法
 * public Method[] getMethods() 获取本类与父类中所有public 修饰的方法
 * public Method[] getDeclaredMethod()获取本类中所有的方法,包含使用的
 *
 *通过反射,调用方法
 * 步骤:
 * 1.获取Class对象
 * 2.获取指定的public方法
 * 3.获取构造方法创建对象
 * 4.执行方法
 * Method.invoke(Object,?)
 *
 *通过反射,获取私有方法的调用;
 * 步骤:
 * 1.获取Class对象
 * 2.获取指定的public方法
 * 3.获取构造方法创建对象
 * 4.开启暴力访问
 * setAccessible(true);取消java虚拟机对该方法的访问检查机制。
 * 5.执行方法
 * Method.invoke(Object,?)
 *
 *---------------------------------------------------
 *通过反射,获取成员变量(字段)
 *
 * 获取指定的成员变量
 * public Field getField() 获取public修饰的成员变量
 * public Field getDeclaredField(String name) 获取任意的成员变量,包含私有
 *
 * 获取所有的成员变量
 * public Field[] getFields() 获取所有public修饰的成员变量
 * public Field[] getDeclaredFields() 获取所有的成员变量,包含私有
 *
 *通过反射,获取成员变量,并赋值使用
 * 步骤:
 * 1.获取字节码文件对象
 * 2.获取构造方法,创建对象
 * 3.获取指定的成员变量
 * 4.对成员变量赋值\获取值操作
 * public void set(Object obj,Object value) 赋值
 * public Object get(Object obj) 获取值
 *
 * 获取私有的成员变量,并赋值使用
 * 步骤:
 * 1.获取字节码文件对象
 * 2.获取构造方法,创建对象
 * 3.获取指定的成员变量
 * 3.开始自定成员变量的暴力访问,即让jvm调用前不进行访问权限的检查
 * setAccessible(true);取消java虚拟机对该方法的访问检查机制。
 * 4.对成员变量赋值\获取值操作
 * public void set(Object obj,Object value) 赋值
 * public Object get(Object obj) 获取值
 *
 */
 ----------------------------------------------------------------end--------------------------
0 0
原创粉丝点击