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

Java高级-05.反射的作用、应用场景

一.反射的作用

二.案例 

  

Student.class 

package com.njau.d2_reflect;public class Student {private String name;private  int age;private char sex;private double height;private String hobby;public Student(String name, int age, char sex, double height, String hobby) {this.name = name;this.age = age;this.sex = sex;this.height = height;this.hobby = hobby;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", sex=" + sex +", height=" + height +", hobby='" + hobby + '\'' +'}';}
}

 Teacher.class

package com.njau.d2_reflect;public class Teacher {private String name;private double salary;public Teacher(String name, double salary) {this.name = name;this.salary = salary;}public Teacher() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic String toString() {return "Teacher{" +"name='" + name + '\'' +", salary=" + salary +'}';}
}

我们定义一个框架用来获取Teacher类和Student类中的全部字段以及属性值。因此我们需要使用反射首先获取到每个类对象,然后再调用其getDeclaredFileds方法来获取所有的成员变量并封装在一个Filed类型的数组中。然后遍历该数组并获得其名称和值,并将其打印到文件中。

框架如下:

package com.njau.d2_reflect;import org.junit.Test;import javax.print.attribute.standard.MediaSize;
import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;public class ObjectFrame {// 目标:保存任意对象的字段和数据到文件中去public static void reflectFrame(Object obj) throws Exception {PrintStream ps = new PrintStream(new FileOutputStream("src\\data.txt",  // 这里要么用绝对路径,要么用从src起之后的true),true); // append:追加写,是在基础流里面设置为true实现追加写的,而非在打印流中Class c = obj.getClass();ps.println("--------------------------" + c.getSimpleName() + "--------------------------");Field[] fields = c.getDeclaredFields();for (Field field : fields) {field.setAccessible(true);String name = field.getName();String value = field.get(obj) + "";ps.println(name + "--->" + value);}ps.close();}
}

反射第一步首先获取类对象。

调用该框架:

package com.njau.d2_reflect;import org.junit.Test;/*** 反射的作用?* 基本作用:可以得到一个类的全部成分然后操作* 可以破坏封装性* 最重要的用途是:适合做Java框架,基本上,主流的框架都会基于反射设计出一些通用的功能* 使用反射做一个简易版的框架* 需求:* 对于任意一个对象,该框架都可以把对象的字段名和对应的值,保存到文件中去* 实现步骤:* 1、定义一个方法,可以接受任意对象* 2、每收到一个对象后,使用反射获取该对象的Class对象,然后获取全部的成员变量* 3、遍历成员变量,然后提取成员变量在该对象中的具体值* 4、把成员变量名和其值,写出到文件中去即可*/
public class Test5Frame {@Testpublic void save() throws Exception {Student s = new Student("黑马",18,'男',189,"篮球,羽毛球");Teacher t = new Teacher("大黑",9000);ObjectFrame.reflectFrame(s);ObjectFrame.reflectFrame(t);}
}

相关文章:

Java高级-05.反射的作用、应用场景

一.反射的作用 二.案例 Student.class package com.njau.d2_reflect;public class Student {private String name;private int age;private char sex;private double height;private String hobby;public Student(String name, int age, char sex, double height, String …...

CSS中粘性定位

1.如何设置为粘性定位? 给元素设置posttion:sticky 即可实现粘性定位. 可以使用left, right ,top, bottom 四个属性调整位置,不过最常用的是top 值. 2.粘性定位的参考点在哪里? 离他最近的一个拥有"滚动机制"的祖先元素,即便这个祖先不是最近的真实可滚动祖先. 3.粘…...

CockroachDB MCP -cursor适用

CockroachDB MCP 服务器 GitHub仓库置顶 这是一个用于 Cursor 的 CockroachDB MCP 服务器,基于 Model Context Protocol (MCP) 规范实现,可以让你在 Cursor 中直接与 CockroachDB 数据库交互。 功能 连接到 CockroachDB 数据库获取数据库中的所有表获…...

cherry-studio - 多模型支持的跨平台 AI 桌面助手

GitHub:https://github.com/CherryHQ/cherry-studio 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 一款支持多种大语言模型服务的跨平台桌面客户端,兼容 Windows、Linux 和 macOS 系统。它支持主流云端模型&am…...

docker composeyaml文件,什么是swap-space,内存不足硬盘来凑,--ipc=host,yaml文件、环境变量、容器报警健康检查

--swap-space 参数明确针对的是系统内存(RAM),与显存(GPU Memory)无关。以下是关键区分: 内存(RAM) vs 显存(GPU Memory) 类型内存(RAM&#xff…...

Uniapp 开发 App 端上架用户隐私协议实现指南

文章目录 引言一、为什么需要用户隐私协议?二、Uniapp 中实现用户隐私协议的步骤2.1 编写隐私协议内容2.2 在 Uniapp 中集成隐私协议2.3 DCloud数据采集说明2.4 配置方式3.1 Apple App Store3.2 Google Play Store 四、常见问题与解决方案4.1 隐私协议内容不完整4.2…...

Gradio ,一个实用的大模型界面

Gradio是HuggingFace的开源项目,GitHub 28k star。能够方便地构建AI应用的网页界面。 最大的优点是简便。对于不熟悉前端的程序员,能够迅速地构建基于web的AI应用。 Hello World import gradio as gr ​ def print_text(text):return "Hello Wor…...

LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?

快慢指针 为什么相遇后让快指针回到起点,再让快指针和慢指针都一步一步地走,它们就会在环的入口相遇? 复杂度 时间复杂度: O(n) 空间复杂度: O(1) public ListNode detectCycle(ListNode head) {ListNode slow head, fast head;ListNode …...

如何处理PHP中的编码问题

如何处理PHP中的编码问题 在PHP开发过程中,编码问题是一个常见且棘手的问题。无论是处理用户输入、数据库交互,还是与外部API通信,编码问题都可能导致数据乱码、解析错误甚至安全漏洞。本文将深入探讨PHP中的编码问题,并提供一些…...

【动手学强化学习】part8-PPO(Proximal Policy Optimization)近端策略优化算法

阐述、总结【动手学强化学习】章节内容的学习情况,复现并理解代码。 文章目录 一、算法背景1.1 算法目标1.2 存在问题1.3 解决方法 二、PPO-截断算法2.1 必要说明2.2 伪代码算法流程简述 2.3 算法代码2.4 运行结果2.5 算法流程说明 三、疑问四、总结 一、算法背景 …...

游戏引擎学习第159天

回顾与今天的计划 我们在完成一款游戏的制作。这个游戏没有使用任何引擎或新库,而是从零开始编写的完整游戏代码库,您可以自行编译它,并且它是一个完整的游戏。更特别的是,这个游戏甚至没有使用显卡,所有的渲染工作都…...

前端主题切换架构设计方案

1. 架构概述 本文档从架构设计的角度阐述项目的主题切换方案,主要关注系统各层级间的关系、数据流转以及扩展性设计,而非具体实现细节。 架构图 +-------------------------------------------+ | 用户界面层 | | +--------------+ …...

request模块基本使用方法

文章目录 一、前言二、请求2.1 请求方式2.2 请求参数2.3 cookie 三、响应 一、前言 官方文档:https://requests.readthedocs.io/en/latest/ 模块安装:pip install request 二、请求 2.1 请求方式 常用请求方法:get、post 请求方法含义get向…...

内网攻防——红日靶场(一)

在学习内网的过程中有着诸多不了解的内容。希望能借下面的靶场来步入内网的大门。 一、准备阶段 首先准备好我们的虚拟机 之前有学过关于:工作组、域、DC的概念。 了解一下此时的网络拓扑图 1.设置网络VMnet1和Vmnet8 将VMnet1作为内网,VMnet8作为外…...

协议-LoRa-Lorawan

是什么? LoRa是低功耗广域网通信技术中的一种,是Semtech公司专有的一种基于扩频技术的超远距离无线传输技术。LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。它是一种媒体访问控制(MAC)层协议。LoRa = PHY Layer LoRaWAN = MAC Layer功耗最低,传输最远 ![ …...

redis主从搭建

1. 哨兵 1.1 ⼈⼯恢复主节点故障 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量 的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的&…...

std::inplace_merge解析

一 基本概念 std::inplace_merge 是 C++ 标准库<algorithm> 中的算法,用于将两个已排序的相邻范围 合并为一个有序范围,且原地操作(无需额外存储空间)。 二 函数原型 template< class BidirectionalIterator > void inplace_merge( Bidirection…...

【STM32】NVIC(嵌套向量中断控制器)

什么是 NVIC&#xff1f; NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09; 适用于 Cortex-M0、M3、M4、M7 等 ARM 处理器&#xff0c;广泛用于 STM32、ESP32、GD32、NXP 等 MCU 中&#xff0c;它用于管理和控制中断&#xf…...

Linux中Gdb调试工具常用指令大全

1.gdb的安装 如果你是root用户直接用指令 &#xff1a;yum install gdb &#xff1b;如果你是普通用户用指令&#xff1a;sudo yum install gdb&#xff1b; 2.gdb调试前可以对你的makefile文件进行编写&#xff1a; 下面展示为11.c文件编写的makefile文件&#xff1a; code…...

操作系统-八股

进程基础&#xff1a; 进程定义&#xff1a;运行中的程序&#xff0c;有独立的内存空间和地址&#xff0c;是系统进行资源调度和分配的基本单位。 并发&#xff0c;并行 并发就是单核上面轮询&#xff0c;并行就是同时执行&#xff08;多核&#xff09;&#xff1b; 进程上下…...

ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值

note 问题背景&#xff1a;序列推荐&#xff08;SR&#xff09;任务旨在预测用户可能的下一个交互项目。近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在SR系统中表现出色&#xff0c;但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…...

3.14-进程间通信

进程间通信 IPC 进程间通信的原理&#xff0c;借助进程之间使用同一个内核&#xff0c;借助内核&#xff0c;传递数据。 进程间通信的方法 管道&#xff1a;最简单。信号&#xff1a;开销小。mmap映射&#xff1a;速度最快&#xff0c;非血缘关系之间。socket&#xff08;本…...

71.HarmonyOS NEXT PicturePreviewImage组件深度剖析:从架构设计到核心代码实现

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT PicturePreviewImage组件深度剖析&#xff1a;从架构设计到核心代码实现 (一) 文章目录 HarmonyOS NEXT PicturePreviewImage组件深…...

简单实现京东登录页面

Entry Component struct Index {State message: string ;build() { Column(){//顶部区域Row(){Image($r(app.media.jd_cancel)).width(20).height(20)Text(帮助)}.width(100%).justifyContent(FlexAlign.SpaceBetween)//logo图标Image($r(app.media.jd_logo)).width(250).heig…...

非零初始条件系统的传递函数分析

非零初始条件系统的传递函数分析 在传递函数的定义中&#xff0c;通常假设系统满足零初始条件。然而在实际应用中&#xff0c;很多系统需要处理非零初始状态。为了探讨这一问题&#xff0c;我们以一个一阶微分方程为例进行分析。 一、一阶系统的分析 考虑以下一阶微分方程&a…...

9.贪心算法

简单贪心 1.P10452 货仓选址 - 洛谷 #include<iostream> #include<algorithm> using namespace std;typedef long long LL; const int N 1e510; LL a[N]; LL n;int main() {cin>>n;for(int i 1;i < n;i)cin>>a[i];sort(a1,a1n);//排序 LL sum 0…...

代码随想录算法训练营第31天 | 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 代码随想录 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…...

Bash语言的集合

Bash语言的集合&#xff1a;一个深入探讨 引言 Bash&#xff08;Bourne Again SHell&#xff09;是一种Unix Shell和命令语言&#xff0c;广泛应用于Linux及类Unix系统中。作为Linux 默认的命令行解释器&#xff0c;Bash 被数以万计的开发者和系统管理员使用&#xff0c;以其…...

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…...

Pytorch实现之最小二乘梯度归一化设计

简介 简介:LSGAN提出了一种利用最小二乘法来计算两个数据分布之间的距离,该论文在此基础上采用梯度归一化来进一步稳定训练。 论文题目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一种新的生成对抗网络的最小…...