注解和反射学习

注解

  • 概念:顾名思义,与注释类似注释给人看,而注解可以给程序扫描读取信息
  • 作用:
    • 不是程序本身,可以对程序作出解析
    • 可以被其他程序读取
  • 自定义
    • 组成
      • 元注解
        1. @Target 作用目标
        2. @Retention 保留区域
        3. @Document 文档保存
        4. @Inherited 子类继承
      • @interface
      • 字段
        • 类型 + 字段名 如:String[] name()
        • 若字段名为 value() 使用的时候可以默认不写
        • 若追加default默认值 使用的时候不会要求必须填写字段值

反射

  • 概念
    • Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键
  • 原理
    • 类在加载到JVM的过程中,会在JVM的方法区堆内存中存储类的信息,再在普通堆内存中生成类的class镜像作为方法区类的信息的访问入口
    • 类加载到虚拟机的过程为:
      • 加载 --> 连接 --> 初始化 --> 使用 --> 卸载
      • 加载:虚拟机提供的各种加载器,默认先加载环境所需要的类文件,如ext中的
      • 连接:
        1. 验证:检查代码符合虚拟机读取解析的规范
        2. 准备:内存准备 正式为类变量分配内存并设置默认值,该阶段在方法区堆内存进行
        3. 解析:虚拟机常量池的符号引用(常量名)替换为直接引用(地址)的过程
  • 获取
    • 全限类名获取
    • 对象获取
    • Class类的静态方法 Class.forName()加载获取
    • 内置基本类型 类名.Type获取
    • ClassLoader获取
  • 性能方面
    • 因为能获取所有类信息,功能强大,但性能能耗却很高
    • 在获取私有信息时,使用accessible(true)方法开启访问,性能能耗会降低

注解和反射学习

上一篇:硬币问题


下一篇:vue项目中input框默认获得焦点,回车选中输入文本