• 反射框架的灵魂


    我们先来看一看Java代码的执行过程

     上图:第一个源代码阶段是在磁盘中,第二第三阶段 Class类对象,运行时在内存中

    * 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
    * 反射:将类的各个组成部分封装为其他对象,这就是反射机制
    * 好处:
    1. 可以在程序运行过程中,操作这些对象。
    2. 可以解耦,提高程序的可扩展性。
    * 获取Class对象的方式:
    1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象(第一阶段)
    * 多用于配置文件,将类名定义在配置文件中。读取文件,加载类
    2. 类名.class:通过类名的属性class获取                (第二阶段)
    * 多用于参数的传递
    3. 对象.getClass():getClass()方法在Object类中定义着。      (第三阶段)
    * 多用于对象的获取字节码的方式

    * 结论:
    同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
    * Class对象功能:
    * 获取功能:
    1. 获取成员变量们
    * Field[] getFields() :获取所有public修饰的成员变量
    * Field getField(String name)   获取指定名称的 public修饰的成员变量

    * Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
    * Field getDeclaredField(String name)  
    2. 获取构造方法们
    * Constructor<?>[] getConstructors()  
    * Constructor<T> getConstructor(类<?>... parameterTypes)  

    * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)  
    * Constructor<?>[] getDeclaredConstructors()  
    3. 获取成员方法们:
    * Method[] getMethods()  
    * Method getMethod(String name, 类<?>... parameterTypes)  

    * Method[] getDeclaredMethods()  
    * Method getDeclaredMethod(String name, 类<?>... parameterTypes)  

    4. 获取全类名
    * String getName()  
    * Field:成员变量
    * 操作:
    1. 设置值
    * void set(Object obj, Object value)  
    2. 获取值
    * get(Object obj)

    3. 忽略访问权限修饰符的安全检查
    * setAccessible(true):暴力反射

     

    * Constructor:构造方法
    * 创建对象:
    * T newInstance(Object... initargs)  

    * 如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
    * Method:方法对象
    * 执行方法:
    * Object invoke(Object obj, Object... args)  

    * 获取方法名称:
    * String getName:获取方法名
    * 案例:
    * 需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
    * 实现:
    1. 配置文件
    2. 反射
    * 步骤:
    1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
    2. 在程序中加载读取配置文件
    3. 使用反射技术来加载类文件进内存
    4. 创建对象
    5. 执行方法

    如果在配置文件中看到类的全路径名,应该就是反射

     

    这些内容是哔站黑马培训的视频,搬过来,

  • 相关阅读:
    Django之模板层
    Django之视图层
    Django路由系统
    Django request对象与ORM简介
    浏览器不能访问bing
    SQL问题:com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value
    IDEA用Maven创建SpringMVC项目和配置
    离线安装pyinstaller
    flink1.11-报错问题
    maven的pom文件报红
  • 原文地址:https://www.cnblogs.com/shuai666/p/15939111.html
Copyright © 2020-2023  润新知