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


    一:基本概念

         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文件加载到内存中! 

          

  • 相关阅读:
    Remove Duplicates from Sorted List
    Reverse Linked List II
    Remove Duplicates from Sorted List II
    Partition List
    iterator指针指向的元素
    Debug Assertion Failed! (VS)
    创建触发器,动作发送邮件到邮箱
    创建独立的监控模板
    zabbix添加被监控主机,内置的监控项,查看监控数据
    Oracle的sql脚本--->>Mysql的sql脚本
  • 原文地址:https://www.cnblogs.com/njqa/p/5889507.html
Copyright © 2020-2023  润新知