当前位置: 首页 > news >正文

敲黑板!java反射机制和原理

  1. 获取Class对象:首先,你需要获取表示要操作的类的Class对象。可以使用以下三种方式之一来获取Class对象:

    • Class.forName()方法:使用类的全限定名获取Class对象,例如:Class<?
      Class<?> clazz = MyClass.class;
      
      > clazz = Class.forName("com.example.MyClass");
    • .class语法:如果你已经有了类的实例,可以使用.class语法来获取Class对象,例如:Class<?> clazz = MyClass.class;
    • getClass()方法:如果你已经有了类的实例,还可以使用getClass()方法获取Class对象,例如:Class<?> clazz = myObject.getClass();
  2. 获取类的构造方法、方法或字段:一旦你有了Class对象,就可以使用它来获取类的构造方法、方法或字段。

    • 获取构造方法:使用getConstructor()getDeclaredConstructor()方法,例如:Constructor<?> constructor = clazz.getConstructor(paramTypes);
    • 获取方法:使用getMethod()getDeclaredMethod()方法,例如:Method method = clazz.getMethod("methodName", paramTypes);
    • 获取字段:使用getField()getDeclaredField()方法,例如:Field field = clazz.getField("fieldName");
  3. 调用方法或访问字段:一旦你有了方法或字段的引用,就可以使用它们来调用方法或访问字段。

    • 调用方法:使用invoke()方法,例如:Object result = method.invoke(object, args);
    • 访问字段:使用get()set()方法,例如:Object value = field.get(object);field.set(object, value);

需要注意的是,反射涉及到对类的访问和操作

  1. 获取类的Class对象:
    Class<?> clazz = MyClass.class;
    

  2. 获取类的构造方法并实例化对象:
    Constructor<?> constructor = clazz.getConstructor();
    Object object = constructor.newInstance();
    

  3. 获取方法并调用:
    Method method = clazz.getMethod("methodName", parameterTypes);
    Object result = method.invoke(object, arguments);
    

  4. 获取字段并访问:
    Field field = clazz.getField("fieldName");
    Object value = field.get(object);
    field.set(object, newValue);
    

    我们平时的get,set方法的调用也是反射的使用之一,我认为反射就是来调用别的类的方法的手段,是Java常用基础方法之一

http://www.lryc.cn/news/92793.html

相关文章:

  • 【大数据工具】HBase 集群搭建与基本使用
  • 【Java】数组详解
  • NumPy库的学习
  • CentOS安装IRIS
  • 华为OD机试真题 JavaScript 实现【最多几个直角三角形】【2023Q1 100分】
  • vue3中的reactive、ref、toRef和toRefs
  • 数字图像处理与Python实现-图像增强经典算法汇总
  • tag提示词总结
  • 微信小程序原生开发功能合集二十:导航栏、tabbar自定义及分包功能介绍
  • 高通 Camera HAL3:项目开发技术点总结
  • chatgpt赋能python:Python怎么删除列表中的最大值和最小值
  • 简述Vue的生命周期以及每个阶段做的事情
  • LeetCode-C#-0004.寻找两个正序数组的中位数
  • Vue.js 中的 $emit 和 $on 方法有什么区别?
  • LAZADA平台的商品评论Python封装API接口接入文档和参数说明
  • 云原生Docker镜像管理
  • ChatGPT+小红书的8种高级玩法
  • shell脚本学习记录1(运算符)
  • vector 迭代器失效问题
  • docker使用与服务器上的可视化(ROS rviz等)
  • 最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包
  • 仓储WMS对接淘宝奇门详细说明【亲测可用】
  • RFID软件:简介、功能和应用范围
  • Android 逆向之安全防护基本策略
  • 基站机房:保障通信网络稳定,如何解决安全隐患?
  • sqlmap -os-shell 使用方法
  • Go语言并发之Select多路选择操作符
  • 黄金回收小程序开发功能有哪些?
  • nginx的详解与应用
  • SpringBoot激活profiles的几种方式