Java反射——通过Java反射机制设置属性值

2023-05-16

    本示例使用Java反射机制分别设置当前类的private、public属性以及其父类的private属性来说明如何通过Java反射机制设置属性值。(注:设置继承的父类属性时,无法通过当前类的Class对象直接获取其属性字段,须通过其父类Class对象得到Field对象操作)

首先,建立父类User

public class User {
	private String name;
	private int age;

	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;
	}
}

建立子类Student继承User

public class Student extends User {
	//学号
	private String stuNo;
	//专业
	public String major;

	public String getStuNo() {
		return stuNo;
	}

	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}
}

新建测试类

public class Test {
	public static void main(String[] args) throws Exception {
		Object stu = new Student();
		Class clazz = stu.getClass();
		System.out.println("-------设置当前类stuNo(private)属性---------------");
		System.out.println("Before stuNo:"+((Student)stu).getStuNo());
		Field stuNo = clazz.getDeclaredField("stuNo");//通过反射获取stuNo字段
		stuNo.setAccessible(true);//private属性必须设置
		stuNo.set(stu,"13201233");
		System.out.println("After stuNo:"+((Student)stu).getStuNo());
		
		System.out.println("-------设置当前类major(public)属性---------------");
		System.out.println("Before major:"+((Student)stu).getMajor());
		Field major = clazz.getDeclaredField("major");//通过反射获取stuNo字段
		major.set(stu,"软件工程");
		System.out.println("After major:"+((Student)stu).getMajor());

		System.out.println("-------设置继承的父类name属性------------");
		System.out.println("Before name:"+((Student)stu).getName());
		Field name = clazz.getSuperclass().getDeclaredField("name");//通过反射获取父类name字段
		name.setAccessible(true);//private属性必须设置
		name.set(stu,"Edward");
		System.out.println("After name:"+((Student)stu).getName());
	}
}

运行结果:

-------设置当前类stuNo(private)属性---------------
Before stuNo:null
After stuNo:13201233
-------设置当前类major(public)属性---------------
Before major:null
After major:软件工程
-------设置继承的父类name属性------------
Before name:null
After name:Edward

注意:设置private属性值时,必须设置setAccessible(true),否则会抛出如下异常:

Exception in thread "main" java.lang.IllegalAccessException: Class cn.ll.test.Test can not access a member of class cn.ll.test.Student with modifiers "private"
	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
	at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
	at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
	at java.lang.reflect.Field.set(Field.java:761)
	at cn.ll.test.Test.main(Test.java:17)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java反射——通过Java反射机制设置属性值 的相关文章

  • Luogu 1712 [NOI 2016] 区间

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 这么个傻逼题 xff0c 居然把离散化写错了 xff0c 唉 xff0c 我太弱啦 xff01 显然我们可以考虑枚举最短长度和最长长度 xff0
  • CF 977F Consecutive Subsequence

    传送门思路参考代码 传送门 思路 CF 的第一场 div3 xff0c 在我提交了一份有错的代码后突然不能提交了 xff0c 在跑什么 System Testing xff0c 我就跟它杠上了 xff0c 直到它评测完 唉 xff0c 我太
  • CF 7D Palindrome Degree

    传送门思路参考代码 传送门 思路 不是马拉车加随便 DP 乱搞 xff1f 本来想复习一下马拉车的 xff0c 结果拉出了许多事端 xff08 修复了 OI Learner Judge 的严重 bug 一个害我调了两节课的 bug xff0
  • Luogu 3822 [NOI 2017] 整数

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 当年网同这道题还拿了 16 16 分 xff0c 现在一分都不会做了 xff0c 唉 xff0c 我太弱啦 xff01 这道题其实是很不错的 x
  • 【Go】go语言中切片的长度变化后容量的变化

    一 新增信息长度 43 当前长度 lt 61 当前容量 span class token keyword func span span class token function printSlice span span class toke
  • APIO 2018 Practice Session T1 Wedding cake

    没有传送门题目大意思路参考代码熟悉环境 没有传送门 题目大意 给你一个长度为 n n 的正整数序列 a i ai xff0c 要求构造出 n n 个小数 使得它们的和为 1 1 xff0c 且每个数小数点后恰好有
  • APIO 2018 Practice Session T3 / CF 936C Lock Puzzle

    传送门题目大意思路参考代码总结 传送门 题目大意 给你一个字符串 origin xff0c 一个字符串 target xff0c 长度均为 n n 要求在 3 n 3n xff08 5 2 n 5 2
  • APIO 2018 游记

    Day 0Day 1Day 2Day 3Day 4 Day 0 早上 4 4 点就上车去机场赶那 7 7 点的飞机 感觉很困 xff0c 所以在飞机上就这么睡过去了 北京是个好地方 xff0c 但是与我无关 下飞机后 xff0c 我们一行人
  • Luogu 2375 [NOI 2014] 动物园

    文章目录 传送门思路参考代码Review 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 连 KMP 也不会 xff0c WA 飞了 xff0c 唉 xff0c 我太弱啦 xff01 首先 xff0c 原始的 K
  • Luogu 2114 [NOI 2014] 起床困难综合症

    传送门思路参考代码 传送门 思路 按位贪心 但是我太弱了 xff0c 明明可以 O n O n 预处理 xff0c 我却只会 O 32 n O
  • Luogu 2354 [NOI 2014] 随机数生成器

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 这么一个傻逼题 xff0c 我却看成了要你构造一种交换方案使得答案最小 xff0c 结果后面的额外交换是题目给定的 唉 xff0c 我太弱啦 x
  • Luogu 2305 [NOI 2014] 购票

    传送门思路别人家的题解弱化的传送门 xff08 Luogu 3994 高速公路 xff09 参考代码 对于没有距离限制的 50 分 参考代码 对于 100 分的数据参考代码Remarks 传送门 思路 唉 xff0c 我太弱了 xff0c
  • Luogu 1224 [NOI 2013] 向量内积

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 听都没有听说过这类题 xff0c 唉 xff0c 我太弱啦 xff01 显然这道题可以在 O n 2 d O n 2
  • Luogu 1397 [NOI 2013] 矩阵游戏

    传送门思路正解参考代码Remarks 传送门 思路 唉 xff0c 我太弱了 xff0c T1 都做不来 xff0c 唉 xff0c 我太弱啦 xff01 显然这个题可以用矩阵快速幂在 O log n O log n
  • Luogu 2414 [NOI 2011] 阿狸的打字机

    文章目录 传送门思路参考代码总结 传送门 思路 首先我们甚至不能单独保存每个字符串 xff0c 因为总长度可以达到 O n 2
  • kali新手入门教学(10)--ping的讲解

    Ping 是 Windows 和 Linux 都自带的一个扫描工具 xff0c 用于校验与远程计算机或本机的连接 只有在安装 TCP IP 协议之后才能使用该命令 Ping 命令通过向计算机发送 ICMP 回应 报文并且监听回应报文的返回
  • Luogu 3628 [APIO 2010] 特别行动队

    传送门思路参考代码 传送门 BZOJ 思路 设 f i f i 表示将 1 i 1 i 的士兵编
  • Luogu 1399 [NOI 2013] 快餐店

    传送门思路参考代码Remarks总结 传送门 思路 发现这是一棵环套树 那首先我们会想到树上的情况 如果这是一棵树 xff0c 我们自然会联想到树的直径 xff0c 自然会想到对于树而言 xff0c 答案为直径长度的一半 证明 用反证法 假
  • GDB for C++ in Linux

    这篇文章主要讲讲如何在 Linux 下使用 GDB xff0c 当然 xff0c 就指令而言在 Windows 下也适用 环境Items 编译启动退出加载文件查看源代码断点 插入断点删除断点 运行程序查看变量控制程序执行 继续下一步单步进入
  • CF 1000F One Occurrence

    传送门题目大意思路参考代码总结 时光如梭 xff0c Codeforces 的题号还是三位数的时代已经过去 xff1b 量子语言原来已经来临 传送门 题目大意 给定一个长度为 n n 的序列 a a xff0c 有 m m 个

随机推荐

  • CF 993E Nikita and Order Statistics

    传送门题目大意思路参考代码 传送门 题目大意 给你一个数组 a 1 n a 1 n xff0c 对于 k 61 0 n
  • CF 997A Convert to Ones

    传送门题目大意思路参考代码总结 传送门 题目大意 给你一个长度为 n n 3 10 5 n n 3 10
  • CF 997B Roman Digits

    传送门题目大意思路参考代码总结 传送门 题目大意 现在规定罗马数字只有 4 4 个字符 I V X L 分别代表 1 1 5 5 10 10 50 50
  • CF 997C Sky Full of Stars

    传送门题目大意思路参考代码总结 传送门 题目大意 有一个 n n n 10 6 n n n 10
  • CF 997D Cycles in product

    传送门题目大意思路参考代码总结Remarks参考代码 传送门 题目大意 给你大小分别为 n 1 n 1 和 n 2 n 2
  • NOI 2018 游记

    Day 2Day 1Day 0Day 1Day 2Day 3Day 4Day inftyDay 5 Day 2 昨天打完了最后一个一场模拟赛 xff0c 又垫底啦 xff01 本来之前我很少垫底的 xff0c 不知道为什么最后四场模拟赛一直
  • MySQL集群架构

    第1节 集群架构设计 在集群架构设计时 xff0c 主要遵从下面三个维度 xff1a 可用性 扩展性 一致性 1 1 可用性设计 站点高可用 xff0c 冗余站点 xff1b 服务高可用 xff0c 冗余服务 xff1b 数据高可用 xff
  • CF 1008D Pave the Parallelepiped

    传送门题目大意 样例输入样例输出样例解释 思路参考代码总结 传送门 题目大意 给你一个 A B C A B C 的长方体 xff0c 你要把它切成很多块大小都是 a b c
  • Direct2D 学习笔记

    文章目录 Direct2DD2D 是什么D2D 适合谁开发环境发布平台入门我能找到例子吗一 第一个 D2D 程序 Hello Direct2D1 工厂2 呈现器3 渲染4 运行结果 二 Direct2D 画图实践 Random Graphi
  • Python 学习笔记——入门

    文章目录 Python 是什么一 推荐的教程二 这篇学习笔记适合什么人三 环境1 操作系统对于 Windows对于 Ubuntu对于其他操作系统 2 Python对于 Windows安装步骤1 下载2 安装 测试是否成功安装退出 Pytho
  • CF 1166A Silent Classroom

    文章目录 传送门题目大意思路别人的思路参考代码Python 学习笔记 传送门 题目大意 有 n n 100
  • SHGetKnownFolderPath function

    原文 SHGetKnownFolderPath 通过一个 KNOWNFOLDERID 标志获取对应已知文件夹的完整路径 Retrieves the full path of a known folder identified by the
  • WM_DPICHANGED message

    原文 WM DPICHANGED message 当窗口的 DPI 改变时将收到此消息 DPI 是窗口的缩放比例 有多种情况会导致 DPI 改变 xff0c 如下表列出 xff1a 窗口被移动到有不同 DPI 的显示器 窗口所在显示器的 D
  • WSL运行python程序关于路径的坑

    安装了wsl xff08 Windows下的Linux子系统 xff09 xff0c 跑python代码时 xff0c 发现路径有问题 总结来说 xff0c 如果是跑linux里的代码 xff0c 那么其中的绝对路径就按linux的地址解析
  • 【基础编程题】Java基础====键盘输入学生成绩,计算后按总分高低顺序存入磁盘文件txt

    要求 xff1a 有五个学生 xff0c 每个学生有3门课程的成绩从键盘输入以上数据 xff08 包括姓名 xff0c 三门课成绩 xff09 输入的格式 xff1a 如 xff1a zhangsan 30 40 60计算出总成绩 xff0
  • MySQL 配置文件位置及命名。

    MySQL 配置文件位置及命名 使用 mysqladmin 或 mysql xff0c 会提示 MySQL 加载配置文件的顺序及文件命名规范 span class token keyword Default span options are
  • Codeforces 1419B. Stairs 递归

    Codeforces 1419B Stairs 递归 原题链接https codeforces com problemset problem 1419 B 样例 输入 5 2 1 49 5 20 50 6 20 50 5 3 8 9 13
  • dos中定义变量与引用变量以及四则运算

    在dos中使用set定义变量 xff1a set a 61 8 注意等号两边没有空格 引用变量如 xff1a echo a 将打印a的值 dos中要使用算术运算 xff0c 需要使用 set 命令 xff1a set a val 61 3
  • Python将计算结果拷贝至粘贴板

    前言 xff1a 我们知道在使用ctrl 43 c复制文字时 xff0c 实际是将文字复制到了粘贴板中 xff08 内存 xff09 xff0c 而在实际应用中 xff0c 除了将Python的计算结果打印外 xff0c 有时还想进行自动复
  • Java反射——通过Java反射机制设置属性值

    本示例使用Java反射机制分别设置当前类的private public属性以及其父类的private属性来说明如何通过Java反射机制设置属性值 xff08 注 xff1a 设置继承的父类属性时 xff0c 无法通过当前类的Class对象直