• Java中的反射机制


    获取字节码文件对象的三种方式

     

     1,(常用)源代码阶段,Class.forName("全类名")

    2,(传参)加载阶段 类名.class

    3,(前提有对象)运行阶段 对象.getClass()


    Java反射机制(动态获取类的信息)

             框架需要处理任意类,而框架只知道类的地址,就需要对不同的类进行创建对象,方法调用。

            框架通过反射机制,在只知道类地址的情况下,就可以操作类。 

            框架可以通过反射机制在写一套处理程序后,就可以达到以不变应万变。

            java的反射机制在运行状态中,可以动态获取任意类的信息,并且可以创建对象,还可以调用任意对象的方法和属性。这种动态获取,调用的机制称java反射机制。(反向使用类)

    反向使用类的前提:获取Class字节码对象。

    Class类中的方法

    1. constructor.setAccessible(true);//设置指定构造方法为允许访问 暴力反射:表示临时取消权限校验
    2. constructor.getModifiers();//获取构造方法的权限修饰符
    3. adminClass.getConstructor();//获取指定参数个数的公共构造方法(public)
    4. adminClass.getDeclaredConstructor();//获取指定参数个数的所有构造方法(包括私有)
    5. adminClass.getConstructors();//获取所有公共构造方法
    6. adminClass.getDeclaredAnnotations();//获取所有构造方法
    7. adminClass.getFields();//获取所有属性,返回的是一个Field类型的数组
    8. adminClass.getField("gender");//获取公共权限指定名称的属性
    9. adminClass.getDeclaredFields();//获取所有属性
    10. adminClass.getDeclaredField("gender");//获取指定属性名称的属性
    11. adminClass.getMethod("getAds");//获取指定公共方法
    12. adminClass.getMethods();//获取所有公共方法
    13. adminClass.getDeclaredMethod("getAccount");//获取指定方法
    14. adminClass.getDeclaredMethods();//获取所有方法
    1. public class test3 {
    2. public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
    3. Class adminClass = Class.forName("com.ffyc.mybatis.model.Admin");//获取Admin类的Class对象
    4. Constructor constructor=adminClass.getConstructor();//获取类的一个无参构造方法(公共的)
    5. Object obj=constructor.newInstance();//新建一个对象
    6. constructor = adminClass.getDeclaredConstructor(int.class);//获取有一个参数的构造方法(包括私有)
    7. constructor.setAccessible(true);//设置私有的为允许访问
    8. obj = constructor.newInstance(10);//新建一个对象
    9. System.out.println(obj.toString());
    10. System.out.println(adminClass.getDeclaredConstructors().length);//获取所有构造方法(包括私有)
    11. }
    12. }

    暴力反射:表示临时取消权限校验。

    .setAccessible(true);

     

  • 相关阅读:
    C++多态
    Spring Boot 2.x系列【16】功能篇之国际化实现方案
    uview indexList 按字母跳转不了
    基于SSM的电子设备销售网站的设计与实现
    Linux安装RabbitMQ教程(文件下载地址+安装命令+ 端口开放 + 用户创建 +配置文件模板+端口修改)
    我的周刊(第053期)
    算法----滑动窗口
    前端基础:协商缓存
    【爬虫笔记】Python爬虫简单运用爬取代理IP
    Python学习
  • 原文地址:https://blog.csdn.net/m0_71385141/article/details/134338956