反射(通俗易懂)

news2024/11/17 16:14:40

一、反射(Reflection)

  • 反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)

  • 动态语言,是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。

  • 通俗点说就是在运行时代码可以根据某些条件改变自身结构。

二、反射学什么

  • 学习获取类的信息,进行操作

    • 反射第一步:加载类(字节码文件到内存中),获取类的字节码---Class对象

    • 获取类的构造器:Constructor 对象

    • 获取类的成员变量:Field对象

    • 获取类的成员方法:Method对象

三、获取Class对象的三种方式

  • Class c1 = 类名.class

  • 调用提供的方法:public static forName(String package)

  • Object提供的方法:public Class getClass();

    • Class c3 = 对象.getClass();

四、获取类的构造器

4.1获取类的和构造器的作用:初始化对象然后返回

五、获取类的成员变量

5.1获取到成员变量的作用:赋值、取值

六、获取类的成员方法

6.1获取成员方法的作用:执行

七、反射作用,应用场景

八、案例

package com.itheima.myreflect7;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;

/**
 * @author zhumq
 * @date 2024/7/1 23:43
 */
public class ObjectFrame {
    // 目标:能够保存任意对象的字段和字段数据到文件中
    public static void saveObject(Object obj) throws Exception {
        PrintStream ps = new PrintStream(new FileOutputStream("myreflec\\src\\data.txt", true));

        // obj 任意对象,到底有多少字段要保存
        Class c = obj.getClass();
        String cName = c.getSimpleName();
        ps.println("-------------------"+cName+"-------------------");
        // 从class对象中获取所有的字段
        Field[] fields = c.getDeclaredFields();
        // 便利每个字段
        for (Field field : fields) {
            // 获取字段名称
            String name = field.getName();
            // 禁止检查访问权限
            field.setAccessible(true);
            // 获取字段值
            Object value = field.get(obj);
            // 保存到文件中
            ps.println(name + "=" + value);
        }
        ps.close();
    }
}

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

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

相关文章

【软件测试】快速定位bug,编写测试用例

作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员,那么在团队里你在开发中的地位显而易见 ,口碑、升值、加薪那应该是你遥不可及的梦 但是作为测试人员来说&…

强化学习的数学原理:值迭代与策略迭代

概述 从课程地图上可以看出来,这是本门课程中第一次正式的介绍强化学习的算法,并且是一个 model-based 的算法,而在下一节课将会介绍第一个 model-free 的算法(在 chapter 5)。而这两节和之前所学的 BOE 是密切相关的&…

比较多种msvcr110.dll丢失的解决方法,哪一种更加方便?

当遇到“msvcr110.dll丢失”这种问题时,这通常意味着你的系统中缺少了Microsoft Visual C 2012 Redistributable的组件。下面我将详细介绍五种解决方法,并对比它们的优点。 一.多种msvcr110.dll丢失的解决方法 方法 1: 重新安装Microsoft Visual C 2012…

在CMD中创建虚拟环境并在VSCode中使用和管理

1. 使用Conda创建虚拟环境 在CMD或Anaconda Prompt中执行以下代码以创建一个新的虚拟环境: conda create -n my_env python 3.8 这样会创建一个名为 my_env 的环境,并在Anaconda环境目录下生成一个相应的文件夹,包含该虚拟环境所需的所有…

Steam夏促商店不是人民币/商店怎么改回人民币教程

游戏玩家们的狂欢节来了,steam夏促进行中,G胖真够舍得,好多游戏低到无法想象,steam其实也不止是游戏方面比较优秀,相关的拓展也非常全面,比如说创意工坊就是很强的一个功能,简单来说就是给玩家创…

【关注】科大睿智祝贺企业上榜2024年第六批CS资质名单公示

​ 近日,经审核拟定,现将中国电子信息行业联合会会员单位开展信息系统建设和服务能力贯标评估结果公示如下(排名不分先后):拟授予基本级(CS2级)企业:22家,拟授予初始级&…

SSM中小学生信息管理系统-计算机毕业设计源码02677

摘要 随着社会的发展和教育的进步,中小学生信息管理系统成为学校管理的重要工具。本论文旨在基于SSM框架,采用Java编程语言和MySQL数据库,设计和开发一套高效、可靠的中小学生信息管理系统。中小学生信息管理系统以学生为中心,通过…

查找python包的安装路径

前提:自己已经安装过的包 1、打开任一python解析器,如VSCode 2、 以matplotlib为例,敲下面命令 import matplotlibprint(matplotlib.path) 3、运行代码就可以了 需要注意: 部分包没有path(比如time)&am…

JS(JavaScript)数据校验 表单校验-案例

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

PyPDF2拆分PDF文件为单个页面

本文目录 前言一、拆分成为单页1、代码解析2、处理效果图3、完整代码二、其它知识1、enumerate是什么① 语法② 功能③ 示例④ 更改起始索引前言 感觉之前写的不是很满意,为了充分满足付费用户的权益,所以打算把PyPDF2的各种类和用法都重新写一下,以便满足所有订阅用户的各…

Megatron-DeepSpeed与Megatron-LM在reduce grad上的差异

Megatron-DeepSpeed与Megatron-LM在reduce grad上的差异 一.Megatron-DeepSpeed 实现【deepspeed/runtime/engine.py】二.ModelLink 实现【ParamAndGradBuffer】1.ParamAndGradBuffer功能介绍2.实现原理A.分配一大块内存B.获取视图C.all_reduce grad 测试DP1,TP2,PP1,MBS1,zero…

匠心独运:红酒与手工艺的很好结合

在岁月的长河中,红酒与手工艺都以其不同的魅力和技艺,书写着各自的故事。当这两者相遇,仿佛是一场跨越时空的对话,不仅展现了匠心独运的技艺之美,更在无声中诉说着对品质与生活的热爱。今天,就让我们一起探…

CVE-2024-6387漏洞预警:尽快升级OpenSSH

OpenSSH维护者发布了安全更新,其中包含一个严重的安全漏洞,该漏洞可能导致在基于glibc的Linux系统中使用root权限执行未经身份验证的远程代码。该漏洞的代号为regreSSHion,CVE标识符为CVE-2024-6387。它驻留在OpenSSH服务器组件(也…

基于Vue.js和SpringBoot的地方美食分享网站系统设计与实现

你好,我是计算机专业的学姐,专注于前端开发和系统设计。如果你对地方美食分享网站感兴趣或有相关需求,欢迎随时联系我。 开发语言 Java 数据库 MySQL 技术 Vue.js SpringBoot Java 工具 Eclipse, MySQL Workbench, Maven 系统展示…

swiftui中常用组件picker的使用,以及它的可选样式

一个可选项列表就是一个picker组件搞出来的,它有多个样式可以选择,并且可以传递进去一些可选数据,有点像前端页面里面的seleted组件,但是picker组件的样式可以更多。可以看官方英文文档:PickerStyle | Apple Developer…

1分钟了解,预写日志WAL的核心思路...

上一篇《刷盘,还是不刷盘,是一个问题》中我们遇到了哪些问题? 1. 已提交事务未提交事务的ACID特性怎么保证? 画外音:上一篇中遇到的问题,主要是原子性与持久性。 2. 数据库崩溃,怎么实施故障恢复…

Python28-5 k-means算法

k-means 算法介绍 k-means 算法是一种经典的聚类算法,其目的是将数据集分成 ( k ) 个不同的簇,每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置,使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…

如何使用ECharts和Java接口实现可视化的数据挖掘

如何使用ECharts和Java接口实现可视化的数据挖掘 【引言】 随着大数据时代的到来,数据挖掘成为了一项重要的技术,在企业决策、市场分析等领域发挥着重要作用。数据挖掘需要将大量的数据进行分析和展示,而可视化是一种直观、形象的展示方式。…

【kafka】可视化工具cmak(原kafka-manager)安装问题解决

众所周知(反正不管你知不知道),kafka-maneger更名了,现在叫cmak!原因是什么呢?据不可靠小道信息说,原kafka-manager这个名字涉及到kafka商标使用问题,应该是被律师函警告了&#xff…

DeepFaceLive----AI换脸简单使用

非常强大的软件,官方github https://github.com/iperov/DeepFaceLive 百度云链接: 链接:https://pan.baidu.com/s/1VHY-wxqJXSh5lCn1c4whZg 提取码:nhev 1下载解压软件 下载完成后双击.exe文件进行解压.完成后双击.bat文件打开软件 2 视频使用图片换…