反射的作用


  1. 获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑

  2. 结合配置文件,动态的创建对象并调用方法

练习1:

image.png

public class MyTest {public static void main(String[] args) throws IllegalAccessException, IOException {Student s = new Student("小A", 23, '女', 167.5, "睡觉");Teacher t = new Teacher("播妞", 10000);//调用方法upload(t);}private static void upload(Object obj) throws IllegalAccessException, IOException {//1创建字节码文件Class<?> clazz = obj.getClass();//2.创建io流BufferedWriter bw = new BufferedWriter(new FileWriter("..\\reflect\\a.txt"));//获取所有成员变量Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {//暴力反射:因为成员变量有可能是私有化field.setAccessible(true);//获取变量名String name = field.getName();//获取变量在对象中记录的值Object value = field.get(obj);//写入文件bw.write(name + "=" + value);bw.newLine();}bw.close();}
}

image.png

练习二:

image.png

//Student
public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public void study(){System.out.println("学生在学习!");}//set、get、toString
}
//Teacher
public class Teacher {private String name;private double salary;public Teacher() {}public Teacher(String name, double salary) {this.name = name;this.salary = salary;}public void teach(){System.out.println("老师在教书!");}// set、get、toString
}//main
public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {//1.获取properties文件内的数据Properties prop = new Properties();FileInputStream fis=new FileInputStream("..\\reflect\\Info.properties");prop.load(fis);fis.close();System.out.println(prop);//{method=study, className=reflectDemo.Student}//根据键获取值String className = (String) prop.get("className");String methodName = (String)prop.get("method");//根据全类名获取class文件对象Class<?> clazz = Class.forName(className);//反射获取构造方法,创建一个对象oConstructor<?> constructor = clazz.getDeclaredConstructor();Object o = constructor.newInstance();//反射获取方法,参数是方法名Method method = clazz.getDeclaredMethod(methodName);//因为不知道方法是不是私有化,所以暴力反射method.setAccessible(true);//传入对象运行当前方法method.invoke(o);//学生在学习!}
}

准备一个info.properties文件,以键值对的形式存储
image.png
以后若要运行其他类里面的方法,在文件内修改数据即可
image.png
将文件修改为如下,再次运行
image.png
在这里插入图片描述

总结:
Snipaste_2024-02-18_16-26-37.png

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL25 查找山东大学或者性别为男生的信息(union用法)

代码 select device_id , gender , age , gpa from user_profile where university 山东大学 UNION ALL select device_id , gender , age , gpa from user_profile where gender male知识点 在使用 Union 时&#xff0c;如果不需要删除重复行&#xff0c;或者结果集中的重…

EXCEL中不错的xlookup函数

excel中一般要经常用vlookup函数&#xff0c;但其实经常麻烦要正序&#xff0c;从左边到右边&#xff0c;还要数列&#xff0c;挺麻烦的&#xff0c;xlookup的函数还不错&#xff0c;有个不错的一套视频介绍,B站的&#xff0c;地址是&#xff1a;XLOOKUP函数基础用法&#xff0…

【OpenAI Sora】怎么启用:详细教程与使用指南(OpenAI Sora怎么启用)

OpenAI Sora的启用方法&#xff1a;详细教程与使用指南 OpenAI Sora是一种新的AI大模型&#xff0c;可以根据简单的文本提示生成逼真和富有想象力的60秒视频。用户可以通过以下步骤启用OpenAI Sora&#xff1a; 最新消息&#xff1a;本文是设想的方式&#xff0c;但 Sora 目前…

Redis:常用数据类型及其应用场景

Redis中常见的数据类型有五种&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&#xff08;有序集合&#xff09;。下面我来分…

【快速解决】python项目打包成exe文件——vscode软件

目录 操作步骤 1、打开VSCode并打开你的Python项目。 2、在VSCode终端中安装pyinstaller&#xff1a; 3、运行以下命令使用pyinstaller将Python项目打包成exe文件&#xff1a; 其中your_script.py是你的Python脚本的文件名。 4、打包完成后&#xff0c;在你的项目目录中会…

js设计模式:中介者模式

作用: 通过一个公共的对象,去处理不同对象之间的消息传递。 就好比两个用户用微信聊天,微信就是中介者,负责两个人消息的接收与分发。 示例: const Weixin {msgList:[],//添加用户addUser(user){this.msgList.push(user)},//转发消息transmit(msgId,msg,name){this.msgList…

go redis

go redis 快速入门 安装&#xff1a; go get github.com/redis/go-redis/v9然后创建客户端&#xff1a; package mainimport "github.com/redis/go-redis/v9"func main() {rdb : redis.NewClient(&redis.Options{Addr: "47.109.87.142:6379",Pa…

vcruntime140.dll文件下载的多种方案分享,最新下载安装方法解析

安装或运行软件时常遇到缺失系统文件的相关问题&#xff0c;一个典型的例子是vcruntime140.dll​丢失错误&#xff0c;这种情况经常发生在运行那些基于Visual Studio 2015开发的应用上。缺乏这个文件的提示可能会严重拖慢程序的响应速度&#xff0c;并有可能阻碍用户使用受影响…

spring boot自动装配

第一步需要在pom.xml文件指定需要导入的坐标 要是没有自动提示需要检查maven有没有 实现代码 /*springboot第三方自动配置实现方法 * 什么是自动配置 自动配置就是springboot启动自动加载的类不需要在手动的控制反转自动的加入bean中 * * *//*第一种方案包扫描 不推荐因为繁琐…

sensitive-word-admin v1.3.0 发布 如何支持敏感词控台分布式部署?

拓展阅读 sensitive-word-admin v1.3.0 发布 如何支持分布式部署&#xff1f; sensitive-word-admin 敏感词控台 v1.2.0 版本开源 sensitive-word 基于 DFA 算法实现的高性能敏感词工具介绍 更多技术交流 业务背景 如果我们的敏感词部署之后&#xff0c;不会变化&#xff0c;那…

6.s081 学习实验记录(十)file system

文章目录 一、Large files简介提示实验代码实验结果 二、Symbolic links简介提示实验代码实验结果 首先切换到 fs 分支 $ git fetch$ git checkout fs$ make clean 一、Large files 简介 该实验需要我们增大xv6文件的最大大小&#xff0c;目前xv6的最大文件大小为 268个块&…

Postman轻松签名,让SHA256withRSA保驾护航!

前言 在接口测试中&#xff0c;我们经常需要对请求进行签名&#xff0c;以保证数据的安全性。而SHA256withRSA是一种较为常见的签名算法&#xff0c;它可以使用私钥对数据进行签名&#xff0c;使用公钥进行验签。 但是&#xff0c;实现该算法签名可能会涉及到一些繁琐的操作&…