第十八章:类加载机制与反射

一:基本概念

     1.反射:动态创建对象,动态调用方法、访问并修改指定对象的成员变量值。

                java中的类实际上也是实例,它们都是java.lang.Class的实例哦!

     2.类加载或类初始化:   加载    连接  初始化 三个步骤哦! 

                   类加载器:将.class文件加载到内存中去。并生成对应的java.lang.Class对象。

       加载:将类的class文件读入内存,并创建其对应的Class对象。   通过类加载器实现的哦!

          类加载机制:缓存机制,保证所有加载过的Class都会被缓存,所以修改java文件后必须重启JVM。

       连接:将类的二进制数据合并到JRE中(验证、准备、解析)。

                 验证:

                 准备:为类变量分配内存,设置初始值。

                 解析:将类的二进制数据中的符号引用替换成直接引用。

       初始化:指定初始值。  先初始化其直接父类!(向上递归哦)

  3.java对象:编译时类型和运行时类型

          编译时和运行时?  

   java机制:每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该对象就可以访问到JVM中的这个类。

         获取Class对象的三种方式:

                          1.Class.forName(String clazzName)

                          2.调用的class属性  Person.class

                          3.调用某个对象的getClass()方法

      4.可以访问到的资源:构造器、方法、成员变量、Annotation(注解)、内部类、该类所实现的接口、该类的修饰符、包名。

      5.反射创建对象

          1.获取Class对象后,使用Class对象的newInstance()方法来创建该Class对象对应类的实例。

             spring就是如此实现的哦!

                  a:使用配置文件配置对象。

                  b:程序根据配置文件来创建对象

          2.使用Class对象获取指定的Constructor对象(getConstructor()来获取),再调用Constructor对象的newInstance()方法来创建Class对象对应类的实例。

    

二:难点(动态代理)

      

     

三:反射和泛型

     1.通过在反射中使用泛型,可以避免使用反射生成的对象需要强制类型转换。

        Class类的泛型:String.class 的类型是 Class<String>;  如果Class对应的类暂时未知,则使用Class<?>。  

        对比:和集合的泛型很像哦! 

     

     2. 注解.class ?

         接口.class  ? 

 四:总结

  1.什么事反射?

            http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

            http://blog.csdn.net/liujiahan629629/article/details/18013523

  2.什么事动态代理?

  3.指针?          

  4.类加载器:将.class文件加载到内存中! 

      

原文地址:https://www.cnblogs.com/njqa/p/5889507.html