反射之构造方法和成员变量

news2025/1/19 2:52:52

什么是反射

反射允许对成员变量,成员方法和构造方法的信息进行编程访问。

 

   Class类中获取构造方法的方法
        Constructor getConstructors()
        Constructor getDeclaredConstructors()
        Constructor getConstructor()
        Constructor getDeclaredConstructor()

    Constructor类中创建对象的方法
        T newInstance()
        setAccessible() -- 临时取消权限校验

public class Demo1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

        //1、获取class字节码文件
        Class clazz = Class.forName("反射.获取class文件.Student");//第一种获取方式需要全类名

        //2、获取构造方法
        Constructor[] cons = clazz.getConstructors();
        for (Constructor con:cons){
            System.out.println(con);
        }

        //3、获取所有的构造方法(包括私有)
        Constructor[] cons1 = clazz.getDeclaredConstructors();
        for (Constructor con:cons1){
            System.out.println(con);
        }

        //4、获取一个构造方法(根据参数进行筛选)
        Constructor con2 = clazz.getDeclaredConstructor(String.class);
        for (Constructor con:cons){
            System.out.println(con);
        }

        Constructor con3=clazz.getDeclaredConstructor(String.class,int.class);
        //临时取消权限校验,暴力反射
        con3.setAccessible(true);
        Student stu=(Student) con3.newInstance("张三",12);//返回值为Object类,需要数据类型强制转换

        System.out.println(stu);
    }
}

反射获取成员变量


    
        Class类中用来获取成员变量的方法
            Field[] getField();                     返回所有公共成员变量对象的数组
            Field[] getDeclaredField();             返回所有成员变量的数组
            Field getField(String name);            返回单个成员变量的数组
            Field getDeclaredField(String name);    返回单个成员变量

        Field类中用于创建对象的方法
            void set(Object obj,Object value);      赋值
            Object get(Object obj);                 获取值

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {

        //1、获取class字节码文件对象
        Class clazz=Class.forName("反射.获取class文件.Student");

        //2、获取成员变量对象
        Field[] fields = clazz.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        Field[] declaredFields = clazz.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }

        //获取成员变量的对象
        Field name = clazz.getDeclaredField("name");
        System.out.println(name);

        //获取成员变量的权限修饰符
        int modifiers = name.getModifiers();
        System.out.println(modifiers);

        //获取成员变量的名字
        String name1 = name.getName();
        System.out.println(name1);

        //获取成员变量的数据类型
        Class<?> type = name.getType();
        System.out.println(type);

        Student stu=new Student("zhangsan",23);

        name.setAccessible(true);
        String value= (String)name.get(stu);
        System.out.println(value);

        //修改
        name.set(stu,"lisi");

        System.out.println(stu);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/427989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[STM32F103C8T6]看门狗

看门狗&#xff1a; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造 成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#xff0c;由单片机控制的系统无法继续工作&#xff0c;会 造成整个…

LeetCode 1206. 设计跳表

LeetCode 1206. 设计跳表 难度&#xff1a;hard\color{red}{hard}hard 题目描述 不使用任何库函数&#xff0c;设计一个 跳表 。 跳表 是在 O(log(n))O(log(n))O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树&#xff0c;其功能与性能相当&am…

【区块链】【FISCO】WeIdentity

什么是 WeIdentity&#xff1f; 官方的说法&#xff1a;去中心化身份标识解决方案。其实说白了就是互联网上每个人都拥有自己数字身份&#xff0c;并且这个身份是唯一且不可篡改的。 WeIdentity要解决的问题就是用来解决数字身份验证的问题。传统互联网身份验证的方式通常用账…

将ip地址中的每一个字符串按照分隔符提取

1、算法思想 该题采用 c 中的 string 完成比较方便 对于字符串 string str1“hehehe:hahaha:xixixi:lalala” 定义 int pos 0&#xff0c;记录子串的初始位置 在循环语句中重复执行以下操作&#xff1a; &#xff08;1&#xff09;、定义 int ret str1.find(":",…

OpenAI-ChatGPT最新官方接口《聊天交互多轮对话》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(二)(附源码)

目录Chat completions Beta 聊天交互前言Introduction 导言Response format 提示格式Managing tokensCounting tokens for chat API calls 为聊天API调用标记计数Instructing chat models 指导聊天模型Chat vs Completions 聊天与完成FAQ 问与答其它资料下载Chat completions B…

27.Linux网络编程socket变成 tcp 高并发 线程池 udp

好&#xff0c;咱们开始上课了&#xff0c;从今天开始咱们连续讲 8 天的&#xff0c;网络编程这个还是在linux环境下去讲&#xff0c;咱们先看一下咱们这 8 天都讲什么东西&#xff0c;跟大家一块来梳理一下&#xff0c;你先有个大概的印象&#xff0c;这些你也不要记&#xff…

什么是以太坊

以太网是“世界的计算机”&#xff0c;这是以太坊平台的一种常见描述。这是什么意思呢&#xff1f;让我们首先从关注计算机科学的描述开始&#xff0c;然后对以太坊的功能和特性进行更实际的解读&#xff0c;并将其与比特币和其他分布式账本技术&#xff08;简单起见&#xff0…

【学习笔记】unity脚本学习(三)(向量 Vector3)

目录向量复习高中向量基础【数学】向量的四则运算、点积、叉积、正交基叉乘公式叉乘运算定理向量、坐标系点积叉积Vector3 三维向量静态变量变量变量normalized 与 Normalize() 方法静态方法ClampMagnitudeCrossDistanceDotMoveTowards其他变换类似Lerp 在两个点之间进行线性插…

走出至暗时刻,手机“冲高”仍有新故事

随着数十年的发展变迁&#xff0c;智能手机行业已进入平稳发展期&#xff0c;在格局重塑的同时&#xff0c;也引来外界的质疑&#xff1a;出货量下滑&#xff0c;是否意味着行业开始进入至暗时刻&#xff1f; 事实上&#xff0c;这种质疑只看到表层的数据变化&#xff0c;没有…

[Java]Cookie机制

1.Session机制&#xff1a; Session机制https://blog.csdn.net/m0_71229255/article/details/130138826?spm1001.2014.3001.5501 2. 什么是cookie HTTP协议本身是无状态的。什么是无状态呢&#xff0c;即服务器无法判断用户身份。Cookie实际上是一小段的文本信息&#xff0…

优维可观测轴心产品大观:HyperInsight超融合持续可观测解决方案

随着Kubernetes得到越来越广泛的采用&#xff0c;企业软件系统正在向复杂的云原生架构进行革命性转变。应用形式呈现有Web、APP、小程序等多种形式&#xff0c;访问的网络有4G、5G、Wi-Fi等。企业用云也从单一云时代&#xff0c;逐渐来到混合多云时代。在这些庞大复杂的多云环境…

【接口测试】从0不到1的心路历程

我是一名做了三年测试的tester&#xff0c;2020年以功能测试工程师的身份入职北京一家医疗培训公司&#xff0c;入职后为了提高测试效率&#xff0c;接触到接口测试&#xff0c;以下是从零到现在 (还有很大完善的空间&#xff0c;所以不能算是1) 的一些心路历程。 做接口测试的…

李宏毅教程系列——增强学习

目录 0. 强化学习wiki 1. 介绍 2. Exploration vs Exploitation 探索与开发 3. 各类最优化方法 3.1 Brute force猛兽蛮力法&#xff08;暴力搜索&#xff09; 3.2 Value function estimation&#xff08;价值函数估计&#xff09; 3.2.1 Monte Carlo methods 蒙特卡洛方…

linux安装南大通用数据库

linux安装南大通用数据库1、操作系统、数据库2、下载链接3、安装文档4、安装前准备4.1、以root用户创建 gbasedbt 组和用户4.2、创建 GBase 8s 数据库安装目录4.3、上传并解压安装包5、安装5.1、执行安装程序5.2、回车继续 直到接受许可条款5.3、输入安装目录绝对路径5.4、选择…

腾讯音乐笔试0414

介绍一 Triplet Loss的原理&#xff0c; 其中的样本分为哪几类?可以用于哪些场景? Triplet Loss是一种用于训练神经网络的损失函数&#xff0c;主要用于学习映射函数&#xff0c;将样本映射到低维空间中&#xff0c;使得同一类别的样本距离尽可能近&#xff0c;不同类别的样…

开发钉钉和企业微信微应用

钉钉应用开发流程&#xff1a; 1、登录钉钉后台管理 -- 应用管理 -- 工作台 -- 自建应用 2、上传内部应用logo和名字。注意需要添加可访问域名的配置。 3、配置首页可访问地址&#xff1a;打包到线上的路径&#xff08;注意配置正式环境和本地环境&#xff09; 4、在所在公司…

早有尔闻 | 低碳赋能,创新发展

01 2023中国管理科学大会 发布创新奖榜单 海尔位列第一 4月15日&#xff0c;2023中国管理科学大会暨第八届“管理科学奖”颁奖典礼在北京举行。大会发布了第八届中国管理科学学会“管理科学奖”获奖名单&#xff0c;海尔集团“基于用户端低碳升级的智慧能源管理体系建设”项…

[CVE漏洞复现系列]CVE2017_0147:永恒之蓝

Hi~ o(&#xffe3;▽&#xffe3;)ブ 文章目录前言一、永恒之蓝是什么&#xff1f;1.SMB协议介绍。二、准备工作1.Windows7 and kali linux2.テストを開始总结前言 这是新的系列&#xff0c;我能力有限有的漏洞实现不了&#xff0c;我尽力吧 &#x1f968;&#x1f968;&…

Deep Glow(AE辉光特效插件)中文版安装教程

deepglow比AE自带的辉光效果好很多&#xff0c;基于GPU运算&#xff0c;同时控制调节发光效果&#xff0c;有了这款插件&#xff0c;我们就可以非常轻松的模拟出非常真实非常漂亮的物理发光特效&#xff0c;支持各种参数的自定义&#xff0c;喜欢的欢迎下载使用。 安装教程 1…

营收、净利创新高,股价却“跌跌不休”,紫光国微怎么了?

‍数据智能产业创新服务媒体——聚焦数智 改变商业要问当前科技圈处于“风口浪尖”的&#xff0c;除了ChatGPT就应该是半导体了。近日&#xff0c;紫光国微发布2022年年报&#xff0c;实现营收和净利双创新高。作为一家在集成电路设计领域深耕二十余年的企业&#xff0c;紫光国…