码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 反射及暴力反射


    获取对应的Class对象


    1、对象名.getClass():返回的是某个引用指向的具体对象所属的运行是类,的字节码对象。获取到的是那个真正用来创建对象的子类的字节码对象。

    2、类名.class:如果已经有了类名,可以通过.class的方式获取这个类的字节码对象。通过
    
    Class.forName(String className):
    String className 全限定名: 包名+类名

    反射获取构造对象并创建对象

    public Constructor[] getConstructors()能获取所有的被 public修饰的
    获取所有的构造方法:public Constructor[] getDeclaredConstructors():
    只能获取单个被public 修饰的构造:public ConstructorgetConstructor(Class...parameterTypes)
    
    public Constructor getDeclaredConstructor(Class... parameterTypes)可以获取所有的构造方法, 但是一般不会获取被public修饰的构造方法

    反射获取成员变量

    public Field[] getFields() 获取所有public 修饰的变量
    public Field[] getDeclaredFields() 获取所有的 变量 (包含private修饰的)
    可以单个获取
    public Field getField(String name) 获取指定的 public修饰的变量
    public Field getDeclaredField(String name) 获取指定的任意变量(包含私有)
    给我们的成员变量 name 进行赋值
    public void set(Object obj, Object value)
    Object obj 是要给哪一个对象进行赋值 , Object value 具体要赋的值
    一个类中 有 被public空参构造,我们想要创建对象, 就可以不用通过反射获取构造,创建对象
    可以直接通过 Class类中的 newInstance()
    public Field getDeclaredField(String name) 获取指定的任意变量(包含私有)

    反射获取成员方法

    public Method[] getMethods():获取本类和继承过来的所有的public方法
    public Method[] getDeclaredMethods():获取本类中所有的方法(包括private,不包括继承的,和访问权限无关)
    public Method getMethod(String methodName, Class... parameterTypes):获取指定public的方法(包括继承的)
    String methodName 方法的名字
    Class... parameterTypes 方法数据类型.class
    public Method getDeclaredMethod(String name,Class... parameterTypes):获取指定方法(包括private,不包括继承的)

    反射成员方法执行

    public Method getMethod(String methodName, Class... parameterTypes):获取指定public的方法(包括继承的)
    String methodName 方法的名字
    Class... parameterTypes 方法数据类型.class
    执行 通过 反射获取到的成员方法
    public Object invoke(Object obj,Object... args)
    Object obj 要执行哪个对象的成员方法
    Object... args, 要执行的方法的要传入的具体值

    暴力反射

    暴力反射, 通过暴力反射,我们可以执行 类中私有的成员变量,构造方法,成员方法
    获取私有的成员变量, 成员方法 构造
    setAccessible(boolean boo) 决定 能否执行 私有的构造方法
    boolean boo 默认是 false 意味着 执行权限检查
    boo 手动改为 true 意味着取消权限检查
  • 相关阅读:
    QT windows与linux之间sokcet通信中文乱码问题解决方法
    开学季蓝牙耳机怎么选?高性价比学生蓝牙耳机推荐
    java计算机毕业设计共享汽车管理系统MyBatis+系统+LW文档+源码+调试部署
    关于指针作为函数参数;一级、二级指针;改变传入函数中的指针参数——编程小总结(四)
    【KDD20】多变量时间序列异常检测算法之USAD:对抗性训练AE
    SpringBoot2.0---------------14、SpringBoot中Web原生组件注入
    在标准的C++ 语法中,请问有 MyCppClass*& mycppclass 这样的变量定义方式吗?
    Java的JDBC编程
    Spring 6【方法参数校验、SpingAOP介绍、Schema-based方式实现AOP 】(十四)-全面详解(学习总结---从入门到深化)
    go skip list跳表实现之Redis为啥这么快之一的原因
  • 原文地址:https://blog.csdn.net/weixin_69474097/article/details/126880599
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号