zoukankan      html  css  js  c++  java
  • 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动态代理。基于继承当前类的子类实现。

  • 相关阅读:
    ubuntu的apt
    sudo命令
    MySQL导出数据到csv文件
    MySQL导出数据到文件报错
    git_backup.py gitlab项目备份
    java中图像与数组转换
    mongodb转elasticsearch
    impyla-0.14.2.2安装注意事项
    python3.7.3升级 with-openssl openssl-1.0.2a
    hadoop自带性能测试
  • 原文地址:https://www.cnblogs.com/StephenChenin/p/9906315.html
Copyright © 2011-2022 走看看