• JAVA反射


    一、什么是反射

    动态获取信息以及动态调用对象:

    1)是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法
    2)对于任意一个对象,都能够调用它的任意一个方法和属性
    3)首先:获取到每一个字节码文件对应的Class类型的对象 然后:字节码中的方法、变量等映射成相应的类

    获取字节码对象有三种方法:
    Person.java--->Person.class--->Person p=new Person()
    1、Class clazz=Class.forName("类名") //类名从配置文件读取
    2、Class clazz=Person.class //当做静态方法的锁对象
    3、Class clazz=p.getClass() //判断是否是同一个字节码对象

    二、反射机制:

    在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取信息以及动态调用对象的方法的功能称为JAVA的反射机制。

    三、破坏了封装性。

    四、Java反射机制主要提供了以下功能:

    在运行时判断任意一个对象所属的类;
    在运行时构造任意一个类的对象;
    在运行时判断任意一个类所具有的成员变量和方法;
    在运行时调用任意一个对象的方法;
    生成动态代理。
    

    五、类的加载

    当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
    1)加载:将.class文件从硬盘加载进内存,并为之创建一个Class对象(类加载器)。任何类被使用时系统都会建立一个Class对象。
    2)连接(验证、准备、解析):
    3)初始化:

    六、动态代理

    动态代理其实就是通过反射来生成一个代理(运行时动态生成代理类)
    在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。
    1、JDK原生动态代理。基于接口实现
    2、cglib动态代理。基于继承当前类的子类实现。

  • 相关阅读:
    对于GetBuffer() 与 ReleaseBuffer() 的一些分析
    _tmain与main,winMain,wmain收藏
    【引用】常用字符串长度计算函数
    Invalid URI
    Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI10" for linked server "DB1".
    Penang Industrial Zone
    Create Raid 1 and Raid 10 in one server
    Time zone BOGUS not found in registry
    'xxx_Forms' is not a valid Application Database or User 'sa' does not have sufficient permissions to check
    Syteline Goods Receiving Note Report
  • 原文地址:https://www.cnblogs.com/StephenChenin/p/9906315.html
Copyright © 2020-2023  润新知