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

JAVA基础学习笔记_反射+动态代理

文章目录

  • 反射
    • 获取class对象的三种方式
    • 获取构造方法
    • 获取成员变量
    • 获取成员方法
    • 反射的作用
  • 动态代理

反射

允许对成员变量\成员方法\构造方法的信息进行编程访问
把类内的信息扒的干干净净,获取+解剖
获取从class字节码文件中获取

获取class对象的三种方式

public static void main(String[] args) throws ClassNotFoundException {//第一种//最为常用Class<?> aClass = Class.forName("com.itheima.stream.Student");System.out.println(aClass);//第二种//更多是作为参数进行传递Class<Student> studentClass = Student.class;System.out.println(studentClass);//第三种//有了这个类的对象,才可以使用Student student = new Student();Class<? extends Student> aClass1 = student.getClass();System.out.println(aClass1);
}

获取构造方法

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class<?> aClass = Class.forName("com.itheima.stream.Student");
//        aClass.getConstructors();//返回所有的公共构造方法
//        aClass.getDeclaredConstructors();//返回所有的构造方法
//        aClass.getConstructor();//返回单个公共的构造方法
//        aClass.getDeclaredConstructor();//返回单个的构造方法Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class, int.class);//获取构造中的参数Parameter[] parameters = declaredConstructor.getParameters();for (Parameter parameter : parameters) {System.out.println(parameter);}//用反射创建对象//如果是私有的构造方法,需要设置 accessible 为 true,暴力反射访问declaredConstructor.setAccessible(true);Student student = (Student) declaredConstructor.newInstance("张三", 23);System.out.println(student);
}

获取成员变量

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {Class<?> aClass = Class.forName("com.itheima.stream.Student");
//        aClass.getFields();
//        aClass.getDeclaredFields();
//        aClass.getField();
//        aClass.getDeclaredField();Field[] declaredFields = aClass.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println(declaredField);}Field name = aClass.getField("name");//获取权限修饰符System.out.println(name.getModifiers());//获取成员变量类型System.out.println(name.getType());
}

获取成员方法

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {Class<?> aClass = Class.forName("com.itheima.stream.Student");
//        aClass.getMethods();//获取所有的方法(包含父类)
//        aClass.getDeclaredMethods();//获取本类所有的方法(不包含父类)Method method = aClass.getMethod("toString");
//        aClass.getDeclaredMethod();//获取抛出的异常Class<?>[] exceptionTypes = method.getExceptionTypes();for (Class<?> exceptionType : exceptionTypes) {System.out.println(exceptionType.getName());}Method eat = aClass.getMethod("eat", String.class);Student student = new Student();Object out = eat.invoke(student, "汉堡");System.out.println(out);
}

这里的invoke是重点,苍穹外卖的代理有用到

反射的作用

  • 获取一个类里面所有的信息,获取到之后,再执行其他的业务逻辑
  • 结合配置文件,动态的创建对象并调用方法
    确实,我也想不出来怎么从配置文件中获取或修改方法类
public static void saveObject(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {Class clazz = object.getClass();//获取所有的成员变量Field[] declaredFields = clazz.getDeclaredFields();for (Field declaredField : declaredFields) {declaredField.setAccessible(true);String name = declaredField.getName();Object o = declaredField.get(object);System.out.println(name + ":" + o);}
}

动态代理

无侵入式的给对象增强其他的功能
代理工具类

public class ProxyUtil {public static Star createProxy(BigStar bigStar){Star star = (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),//指定用哪个类加载器,去加载生成的代理new Class[]{Star.class},//指定代理类需要实现的接口new InvocationHandler() {//指定生成的代理要干什么@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//参数1,代理对象//参数2,要调用的方法//参数3,调用方法时,传递的参数if ("sing".equals(method.getName())){System.out.println("准备话筒,收钱");} else if ("dance".equals(method.getName())) {System.out.println("准备场地,收钱");}return method.invoke(bigStar,args);}});return star;}

代理对象

public class BigStar implements Star{private String name;public BigStar() {}public BigStar(String name) {this.name = name;}@Overridepublic String sing(String name){System.out.println(this.name+"正在唱歌"+name);return "谢谢";}@Overridepublic void dance(){System.out.println(this.name+"正在跳舞");}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}public String toString() {return "BigStar{name = " + name + "}";}
}

代理对象对应准备的接口,用接口代理对象实现附加功能

public interface Star {void dance();String sing(String name);
}

测试

public static void main(String[] args) {Star proxy = ProxyUtil.createProxy(new BigStar("王宝强"));String result = proxy.sing("某某");System.out.println(result);
}

相关文章:

JAVA基础学习笔记_反射+动态代理

文章目录 反射获取class对象的三种方式获取构造方法获取成员变量获取成员方法反射的作用 动态代理 反射 允许对成员变量\成员方法\构造方法的信息进行编程访问 把类内的信息扒的干干净净,获取解剖 获取从class字节码文件中获取 获取class对象的三种方式 public static void …...

Go 协程上下文切换的代价

在 Go 语言中&#xff0c;协程&#xff08;Goroutine&#xff09;是一种非常轻量级的并发执行单元&#xff0c;设计之初就是为了简化并发编程并提高性能。协程的上下文切换被认为是非常高效的&#xff0c;但是它的真正性能优势需要我们深入了解其背后的机制。 本文将深入探讨 …...

TikTok代理IP:如何帮助解决限流、封号问题?

在当今的社交媒体领域&#xff0c;TikTok仍然是“当红”平台。然而&#xff0c;许多用户在使用 TikTok 的过程中&#xff0c;常常会遇到限流和封号的问题&#xff0c;比如视频零播放&#xff0c;带来了极大的困扰。 这些限流和封号问题的出现&#xff0c;引发了用户对解决方法…...

vue中验证码的实现方式

在写登录页的时候有的系统会让你也进行一下验证码绘制&#xff0c;那么验证码如何实现的呢&#xff1f;我在写登录页的时候通过将登录框&#xff0c;验证码分开页面来写&#xff0c;最后将它们变成标签来导入到我的样式页面中&#xff0c;这样写不仅方便&#xff0c;更容易修改…...

从零开始学习18串锂电池BMS保护板

18串锂电池BMS保护板实物开源资料&#xff01; BMS系统ADBMS1818/LTC6813凌力尔特主从一体机采集板&#xff1a;STM32F103LTC6813/ADBMS1818程序已调通: 1:18串电池电压&#xff08;采集精度1.2mV/3mV&#xff09; 2:8通道温度采集 3:一通道电流采集 4:RS485通信&#xff08;楼…...

最左侧1问题的一种二分法解法

背景 最近看TI的C6000系列DSP文档时了解到Leftmost 1 or 0 counting功能&#xff0c; 网上搜索到这篇相关博客&#xff08;最左侧1问题&#xff09;&#xff0c;发现里面的二分法代码自己看不懂&#xff0c;于是尝试用更容易看懂的方式重写一下。 思路 假设输入数据不超过3…...

HarmonyOS-中级(四)

文章目录 Native适配开发三方库的基本使用 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;HarmonyOS专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月09日11点12分 Native适配开发 Node-API HarmonyOS Node-API 是 HarmonyOS 提供的…...

rust中self、self、self区别

self的类型&#xff0c;在给出调用者和方法名的前提下&#xff0c;Rust可以准确地推导出方法是否是只读的&#xff08;&self&#xff09;&#xff0c;是否需要修改数据&#xff08;&mut self&#xff09;&#xff0c;是否会获取数据的所有权&#xff08;self&#xff0…...

种子流和花粉流怎么理解它们之间的大小关系

种子流和花粉流是植物繁殖和遗传多样性研究中的两个重要概念&#xff0c;它们分别描述了种子和花粉在空间上的传播过程。理解它们之间的大小关系&#xff0c;即传播距离和对遗传结构的影响&#xff0c;对于生态学和保护生物学具有重要意义。 种子流&#xff08;Seed Dispersal&…...

Mybatis-plus 源码解读

简述 本篇主要针对MybatisPlus源码进行解读。 案例 上一篇已经讲了Springboot如何集成MybatisPlus&#xff1a; springboot-mybatis-plus集成篇 源码解析 和Springboot集成Mybatis一样&#xff0c; 依赖了mybatis-plus-spring-boot3-starter&#xff0c;其中主要关注spri…...

web 期末作业简单设计网页——“我的家乡”网站简单设计

1、网页效果 首页 七彩云南页 旅游攻略页 用户页面 2、源代码 首页 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>首页</title><link rel"stylesheet" href"out.css&quo…...

Redis篇-3--原理篇2--Redis事务

1、概述 Redis 提供了简单的事务机制&#xff0c;Redis 事务的本质是一组命令的集合。当执行redis事务时&#xff0c;即一次性按照添加顺序依次执行这些命令&#xff0c;中间不会被打断或者干扰。 Redis 的事务机制并不像关系型数据库中的事务那样提供完整的ACID特性&#xf…...

GEE:CCDC 分类组件,对每个分段进行分类

作者:CSDN @ _养乐多_ 连续变化检测与分类(Continuous Change Detection and Classification, CCDC) 利用了时间序列拟合来对影像中的像素值随时间的变化趋势建模。每一段模型代表一个时间段内的地表覆盖类型和状态。 本文将解释如何在谷歌地球引擎(Google Earth Engine,…...

常见排序算法总结 (四) - 快速排序与随机选择

快速排序 算法思想 每一轮在数组相应的范围上随机找一个元素进行划分&#xff0c;将不大于它的所有元素都放到左边&#xff0c;将大于它的元素都放到右边。在左右两个子数组上不断地递归&#xff0c;直到整个数组上有序。 注意&#xff1a;实现时选择的时参考荷兰国旗问题优化…...

[创业之路-187]:《华为战略管理法-DSTE实战体系》-1-从UTStarcom的发展历程,如何辩证的看企业初期发展太顺利中的危机

目录 一、UTStarcom&#xff08;UT斯达康&#xff09;的发展历程 1、创立与初期发展 2、快速成长与上市 3、技术创新与业务拓展 4、战略调整与持续发展 二、从UTStarcom的发展历程&#xff0c;如何辩证的看企业初期发展太顺利中的危机 1、企业初期发展的顺利表现 2、顺…...

C缺陷与陷阱 — 3 深入理解表达式

目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符&#xff08;函数调用操作符 ( )、&&、| |、? : 和 ,&#xff…...

Next.js 系统性教学:中间件与国际化功能深入剖析

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 一、Next.js 中间件 (Middleware) 功能解析 1.1 什么是中间件&#xff1f; 1.2 Next.js 中间件的工作机制 1.3 中间件的功能应用 身份验证与授权 请求重定向 修改请…...

openWebUI+ollamawindows+不用docker+webLite本地安装

openWebUI & ollama & windows & 不用docker & webLite 本地安装 总结一下安装教程 10核CPU16G内存 两个web框架都可以&#xff0c;先说简单的 ollama-webui-lite(https://github.com/ollama-webui/ollama-webui-lite) 轻量级&#xff0c;只使用nodejs 先装…...

动态规划——机器分配、01背包问题

一、机器分配 题目名称&#xff1a;机器分配 题目描述&#xff1a; 总公司拥有高效设备M台&#xff0c;准备分给下属的N个分公司。 各分公司若获得这些设备&#xff0c;可以为国家提供一定的盈利。 问&#xff1a;如何分配这M台设备才能使国家得到的盈利最大&#xff1f;求出最…...

leetcode——哈希表1

242.有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的 字母异位词 。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat", t "car" 输出: false 提示: 1 < s.le…...

STM32+模拟或硬件IIC+SHT20驱动问题:接上拉电阻、BUSY死锁?

主要问题&#xff1a; 1&#xff0c;使用STM32F103C8T6&#xff0c;模拟IIC&#xff0c;SCL和SDA口配置为推挽输出上拉&#xff0c;主要是SDA脚&#xff0c;每次都要输出输入模式重新配置&#xff0c;虽然也能通信&#xff0c;但不稳定&#xff0c;出错率大&#xff1b; 2&…...

Android四大组件——Activity(二)

一、Activity之间传递消息 在&#xff08;一&#xff09;中&#xff0c;我们把数据作为独立的键值对进行传递&#xff0c;那么现在把多条数据打包成一个对象进行传递&#xff1a; 1.假设有一个User类的对象&#xff0c;我们先使用putExtra进行传递 activity_demo06.xml <…...

PHP实现华为OBS存储

一&#xff1a;华为OBS存储文档地址 官方文档&#xff1a;https://support.huaweicloud.com/obs/index.html github地址&#xff1a;https://github.com/huaweicloud/huaweicloud-sdk-php-obs 二&#xff1a;安装华为OBS拓展 composer require obs/esdk-obs-php 三&#x…...

SQL连续登录问题(详细案例分析)

如果要统计用户活跃度&#xff0c;那就涉及连续登录问题&#xff0c;接下来将举一个简单的例子来详细说明这个问题&#xff1a; 一、创建一些模拟数据 一些测试数据如下&#xff1a; deviceid1,2022-10-26,2022-10-26,2022-11-01 deviceid1,2022-10-26,2022-11-03,2022-11-0…...

OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数&#xff0c;它允许固定某些点来进行更精确的标定。 函数原型 double cv::calibrateCa…...

【一本通】农场派对

【一本通】农场派对 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; N头牛要去参加一场在编号为x(1≤x≤n)的牛的农场举行的派对(1≤N≤1000)&#xff0c;有M(1≤m≤100000)条有向道路&#xff0c;每条路长ti(1≤ti≤100)&#xff1b;每头牛…...

uniapp中父组件传参到子组件页面渲染不生效问题处理实战记录

上篇文件介绍了,父组件数据更新正常但是页面渲染不生效的问题,详情可以看下:uniapp中父组件数组更新后与页面渲染数组不一致实战记录 本文在此基础上由于新增需求衍生出新的问题.本文只记录一下解决思路. 下面说下新增需求方便理解场景: 商品信息设置中添加抽奖概率设置…...

基础暴力算法

线性枚举 线性枚举&#xff08;Linear Enumeration&#xff09;是一种暴力枚举的方法&#xff0c;它逐一检查每个可能的解&#xff0c;适用于搜索和枚举问题。 其核心思路是&#xff1a;对问题的所有可能情况逐一进行遍历&#xff0c;并针对每种情况判断是否满足条件&#xf…...

【复变函数】三、复变函数的积分

目录 1. 复变函数积分1.1. 复积分1.2. 存在性与计算1.2.1 第二类曲线积分与格林公式1.2.2 第一类曲线积分与参数式 1.3. 性质1.4. 圆径积分 2. 柯西积分定理2.1. 柯西&#xff08;Cauchy&#xff09;基本定理与莫雷拉&#xff08;Morrera&#xff09;定理2.2. 复合闭路定理2.3.…...

ChatGPT Pro是什么

ChatGPT Pro 和 ChatGPT Plus 的区别主要体现在功能范围、适用场景和目标用户上。 ChatGPT Plus 功能 • 价格&#xff1a;20美元/月。 • 目标用户&#xff1a;针对个人用户设计。 • 主要特点&#xff1a; • 在高峰期响应速度更快。 • 使用高级模型&#xff08;如 GPT-4…...

React - echarts 世界地图,中国地图绘制

中国地图 首先需要一个包含中国所有省份名称的 json&#xff0c;这个好多网站都能找到。 我传到资源里了&#xff0c;放百度网盘怕太长时间不登录给我删掉了。 中国地图中文版json 我把地图抽出来单独做成了组件&#xff0c;这样用的时候比较方便. 使用的时候&#xff1a; …...

knife4j-openapi3 4.5 最基本的使用 openAPI

最基本的使用&#xff0c;配置太多懒得研究 SpringBoot 整合 knfe4j &#xff0c;使用 OpenAPI3 规范&#xff0c;这个兄弟写的挺好 环境&#xff1a; spring-boot-starter-parent&#xff1a;3.4.0 1. 依赖 <dependency><groupId>com.github.xiaoymin</gr…...

如何在 Ubuntu 22.04 上安装和使用 Apache Kafka

简介 Apache Kafka是一个高性能、低延迟的分布式流处理平台&#xff0c;广泛用于构建实时数据管道和流式应用。本文将指导你如何在Ubuntu 22.04系统上快速部署Apache Kafka&#xff0c;让你体验到Kafka在处理大规模实时数据流方面的强大能力。通过本教程&#xff0c;你将学会如…...

Linux:network:添加ip的时候自动添加一个本地路由

文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...

Android 10、11、12存储适配相关

AndroidQ(10)分区存储完美适配 - 简书前言 最近时间在做AndroidQ的适配&#xff0c;截止到今天AndroidQ分区存储适配完成&#xff0c;期间出现很多坑&#xff0c;目前网上的帖子大部分都是概述变更内容&#xff0c;接下来的几篇帖子都是对分区存储实际...https://www.jianshu.c…...

如何将视频转化为音频?五个方法策略

在日常生活中&#xff0c;我们经常需要将视频中的音频提取出来&#xff0c;以便在特定的场合使用。无论是为了制作铃声、背景音乐&#xff0c;还是为了进行语音转文字处理&#xff0c;视频转音频的需求都非常普遍。如何将视频转化为音频&#xff1f;本文将详细介绍多种将视频转…...

ecovadis评估最新标准

EcoVadis评估的最新标准主要包括奖牌评估规则和新增的徽章规则&#xff0c;以下是对这两方面的详细阐述&#xff1a; 一、奖牌评估规则 评估范围&#xff1a;EcoVadis的评估总分为100分&#xff0c;评估内容涵盖环境、劳工与人权、商业道德、可持续采购等四大主题。 奖牌等级…...

Java版-图论-最小生成树-Kruskal算法

实现描述 为了造出一棵最小生成树&#xff0c;我们从最小边权的边开始&#xff0c;按边权从小到大依次加入&#xff0c;如果某次加边产生了环&#xff0c;就扔掉这条边&#xff0c;直到加入了 n-1 条边&#xff0c;即形成了一棵树。 实现代码 首选我们对所有的边&#xff0c…...

【单片机开发】MCU三种启动方式(Boot选择)[主Flash/系统存储器(BootLoader)/嵌入式SRAM]

目录 参考资料&#xff1a; 利用 Boot 选择不同的启动方式&#xff1a; 单片机的存储结构(主 FLASH/系统存储器/嵌入式 SRAM)&#xff1a; 1. Cortex-M 内核芯片——启动原理&#xff1a; 1.1. 启动流程&#xff1a; 1.2. 根据单片机的存储器映射和架构图&#xff1a;启动…...

实验15 验证LSTM模型的长程依赖

本次实验依托上个实验 一 模型构建 创建LSTM模型&#xff0c;里面包括初始化init函数、初始化权重函数_init_weights、初始化状态函数init_state、前向传播函数forward。 init函数&#xff1a;虽然每个时间的输入和隐层都是一样的&#xff0c;但是他们会有四组不同的权重&am…...

Charles功能说明

1.扫把(clear the current Session) (前头方向) 作用:清除所有抓取的包(正方形框) 2.中心圈-未启用显示(Star Recording)点击启动 -启动之后显示(Stop Recording)点击停止 作用:启动之后开始抓取包(刷新一次页面或跳转抓取内容) 3.锁-未启动显示(Star SSL Proxying)点击启动 -启…...

自动秒收录程序与自动秒收录网站源码论坛版本下载

自动秒收录程序与自动秒收录网站源码论坛版本下载 随着互联网的快速发展&#xff0c;网站优化已成为众多企业和个人博主提升在线影响力的关键手段。其中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;作为提升网站排名的核心策略&#xff0c;备受关注。而SEO优化的一个…...

HTML颜色-HTML脚本

HTML脚本 js使得HTML页面具有更强的动态和交互性 HTML<script>标签 标签用于定义客户端脚本&#xff0c;比如javascript 可包含脚本语句&#xff0c;也可以通过src属性指向外部的脚本文件 JavaScript最常用于图片操作&#xff0c;表单验证以及动态的内容更新 HTML<n…...

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…...

使用Kimi开发自己的问答应用

概述 Kimi是大家常用的一个人工智能助手&#xff0c;本文使用Kimi开发文档&#xff0c;以node作为后端&#xff0c;开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手&#xff0c;擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...

Vue前端开发-路由其他配置

在路由文件中&#xff0c;除了跳转配置外&#xff0c;还可以进行路径重定向配置&#xff0c;如果没有找到对应的地址&#xff0c;还可以实现404的配置&#xff0c;同时&#xff0c;如果某个页面需要权限登录&#xff0c;还可以进行路由守卫配置&#xff0c;接下来&#xff0c;分…...

AI与遥感的融合:构建新一代智能监测作业平台

在测绘地理信息与遥感领域&#xff0c;人工智能&#xff08;AI&#xff09;技术的融合正推动着一场监测作业模式的革命。AI不仅提升了数据处理的效率&#xff0c;还极大地扩展了遥感技术的应用范围和深度。 遥感监测的智能化趋势 随着遥感数据量的激增&#xff0c;传统的人工…...

3D 视觉定位技术:汽车零部件制造的智能变革引擎

在汽车零部件制造领域&#xff0c;传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求&#xff0c;促使企业寻求突破之道。而 3D 视觉定位技术&#xff0c;为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…...

git提交时出现merge branch main of xxx

git提交时出现merge branch main of xxx 原因&#xff1a; 1、同事commit了一个修改A&#xff0c;push到remote 2、我把这个修改直接pull了下来&#xff08;pull是fetchmerge的操作&#xff0c;自动合并到本地workspace&#xff09; 3、同事因为后续的commit有冲突&#xff0c…...

重生之我在异世界学编程之C语言:深入结构体篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…...