反射。

反射:

先分析下Java代码在计算机中经历的阶段:

第一阶段:我们写的Java程序,也就是类,xx.java 文件,通过javac编译后,成为 xx.class 的字节码文件,这个阶段是源代码阶段。

第二阶段:xx.class文件,通过类加载器,将类的各种成员封装成class类对象,比如 成员变量放在Field数组中,构造方法放在Constructor数组中,成员方法放在Method数组中,这是Class类对象阶段

第三阶段:我们就可以具体的创建对象了,进入Runtime  运行时阶段。

反射:将类的各个组成部分封装成其他对象,这就是反射机制。

好处:1、可以在程序运行过程中操作这些对象。2、解耦,提高程序可扩展性。

获取字节码class对象的方式:

1、Class.forName("全类名") :将字节码文件加载到内存,返回Class对象

  多用于配置文件,将类名定义在配置文件中。

2、类名.class  :通过类名的属性class获取。

  多用于参数的传递。

3、对象.getClass() .

  多用于对象的获取字节码的方式。

Class对象功能:

 获取功能:

  获取成员变量们:

    Field[] getFields()      Field[] getField(String name)     获取public的成员

    Field[] getDeclaredFields()   Field[] getDeclaredField(String name)  获取所有的成员

    setAccessible(ture) 暴力反射,忽略访问修饰符的安全检查。

    操作: 设置值: void set(Object obj, Object value)  获取值:get(Object obj)

  获取构造方法们:

    Constructor<?>[] getConstructors() ..............

    操作:创建对象:T newInstance(Object...initargs) 如果用空参的构造方法,可以简化:

       用Class对象的newInstance 方法。

  获取成员方法们:

    Method[] getMethods() ............................

    操作:执行方法:Object invoke(Object obj,Object...args) 获取名称:String getName

猜你喜欢

转载自www.cnblogs.com/zhangyuhao/p/10914694.html