zoukankan      html  css  js  c++  java
  • java回顾之反射和注解

    java回顾之反射和注解

    1.类加载

    1.类的加载

    当一个类第一次被使用的时候,会被加载到方法区,且一个类只会加载一次。

    一个类在内存中只有唯一的一个字节码对象(.class对象)

    2.类的加载时机

    1. 创建类的实例。

    2. 调用类的静态变量,或者为静态变量赋值。

    3. 调用类的静态方法。

    4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。

    5. 初始化某个类的子类。

    6. 直接使用java.exe命令来运行某个主类。

    3.类加载器

    类加载器的功能就是完成类的加载。

    • 启动类加载器(Bootstrap ClassLoader)

    • 扩展类加载器(Extension ClassLoader) 在JDK9以后更名为平台类加载器(Platform ClassLoader)

    • 应用程序类加载器(Application ClassLoader)

    • idea获取类加载器

    2.反射

    1.反射的概念

    反射是一种机制,可以在程序运行期间,去调用类中的各种成员。(构造方法,变量,方法),可以不创建对象,就是用里面的方法

    2.获取字节码对象的三种方式

    • 使用类名调用class属性

    • 使用对象调用getClass()方法

    • 使用Class类的静态方法forName()

    3.反射操作构造方法

    反射获取构造方法

      Class类可以调用: 

    getConstructor(Class... c) 可以获取某一个构造方法(公共的)
    getConstructors() 可以获取所有的构造方法(公共的)

    反射执行构造方法

      Constructor类可以调用:

          newInstance(Object... obj) : 执行当前构造方法创建对象。

    4.反射操作成员方法

    • 反射获取成员方法

      • Class类中的方法:

        getMethod(String name, Class... c) :获取一个成员方法(公共的)
        getMethods() : 获取类中的所有方法(公共的)
    • 反射执行成员方法  
      • Method类可以调用:
          • Object  invoke(Object obj , Object... o)  :让方法执行

    5.暴力反射

    在一个类中有些成员因为权限的问题无法访问,暴力反射的作用就是跳过权限的限制,可以访问私有成员。

    暴力反射写法:在之前的方法中间加Declared

    在执行之前: .setAccessable(true);//设置成可访问

    暴力反射技术一般不用, 因为他打破java的规范。

     

    3.注解

    1.概述

    注解就是@

    注解是类的一个组成部分,可以给类添加一些额外的内容,注解相当于是一个标记。

    2.注解的作用

    • 生成帮助信息

      @author   作者
      @param   参数介绍
    • 编译检查

      @Override    检查方法是一个重写方法
      @FunctionalInterface 检查接口是一个函数式接口
    • 有功能性质

      @Test       单元测试
      @After

    3、自定义注解

    格式【记住】
    public @interface 注解{

    }
    属性
      格式
        数据类型 属性名();
    数据类型
      基本数据类型
        String
        Class
        枚举
        注解
    以上类型的数据形式
    注意事项:【记住】
      1.如果属性有默认值,在使用时可以不赋值
      2.如果只有一个属性且名字叫value,在使用是可以省略value=
      3.数组类型的属性如果只有一个元素,可以省略大括号{}

    元注解
      @Target
      定义注解的使用位置
      @Retention
      定义注解的生命周期

    总结:

    反射【重点】
    概念
    反射是一种机制,能够在成员运行期间,获取类中的各种成员

    //如果你之前见过快速创建对象的方式,你可以去用,但是那个东西已经过时了。

    获取构造方法【重点】
      getConstructors() :获取所有的构造方法
      getConstructor() :获取某一个构造方法

    执行构造方法:
      newInstance() :执行

    获取成员方法【重点中的重点】
      getMethods() :获取所有的成员方法
      getMethod() :获取某一个成员方法

    执行成员方法:
      invoke() :执行

    暴力反射
      在上面获取的方法中间加上Declared
      获取之后设置访问权限:setAccessable(true);

     

  • 相关阅读:
    构建WebGL目标时的内存考量
    译作感想
    sign
    VS code搭建C环境
    003 总线
    计算机混淆概念(更新……)
    002计算机硬件性能指标
    001计算机基本组成与工作过程
    Linux虚拟机手动安装eclipse
    VMware安装vmtools实现宿主机和虚拟机共享粘贴板
  • 原文地址:https://www.cnblogs.com/gushiye/p/13911048.html
Copyright © 2011-2022 走看看