Day14_84_通过反射机制修改和获取class里的属性值
通过反射机制修改和获取class里的属性值
* 属性对象.set(Object,属性值) 给Object对象中的某个属性赋值(属性对象)
* 属性对象.get(Object); 获取Object对象中的某个属性赋值(属性对象)
* 属性对象.setAccessible(true); 打破该属性的封装(private) ,虽然使用反射机制可以打破封装性,但是会导致数据不安全。
* 代码实例
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class ReflectTest07 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {
//获取Class对象
Class c=Class.forName("com.shige.Reflect.User");
//利用Class对象创建一个对应类型的对象
Object object=c.newInstance(); //调用了User类的无参构造方法
//获某个特定的属性
Field userNoField=c.getDeclaredField("userNo"); //通过属性名来区分
//给object对象也就是new User()对象,中的userNoField也就是userNo属性赋值
userNoField.set(object,1000);
//获取object对象的userNoField属性也就是userNo属性的值
Object userNo=userNoField.get(object);
System.out.println(userNo); //1000
// 上面是public修饰的属性, 如果是private的呢?
//获取userName属性
Field userNameField=c.getDeclaredField("userName");
//打破该属性的封装(private) 虽然使用反射机制可以打破封装性,但是会导致数据不安全。
userNameField.setAccessible(true);
//给object对象也就是User对象的 userNameField属性(userName变量)赋值
userNameField.set(object,"施歌");
//获取object对象的userNameField属性的值
Object name=userNameField.get(object);
System.out.println(name); // java.lang.IllegalAccessException 因为是private修饰的所以没有权限访问,这时候只有打破封装才可以。
}
}
Day14_84_通过反射机制修改和获取class里的属性值的更多相关文章
- Java通过反射机制修改类中的私有属性的值
首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username ...
- Day14_85_通过反射机制修改Class的属性值(IO+Properties)动态修改
通过反射机制修改Class的属性值(IO+Properties)动态修改 import java.io.FileInputStream; import java.io.FileNotFoundExce ...
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...
- orm获取关联表里的属性值
ORM——关系对象模型 laravel中的Eloquent ORM用于和数据表互动,其中每个数据库表会和一个对应的「模型」互动,想要了解请查看官方文档或自行百度.获取关联表里的属性值代码如下: /** ...
- python通过win32api轻松获取控件的属性值
1.如何利用句柄操作windows窗体 首先,获得窗体的句柄 win32api.FindWindows() 第二,获得窗体中控件的id号,spy++ 第三,根据控件的ID获得控件的句柄(hwnd) ...
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- jquery获取当前选项的属性值a
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 获取JSON对象的属性值
1.问题背景 有一个json对象,其中有键值对,那怎样获取json对象中属性值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值
7.10 高级依赖关系配置 组件与组件之间的耦合,采用依赖注入管理:但基本类型的成员变量值,应直接在代码中设置. Spring支持将任意方法的返回值.类或对象的Field值.其他Bean的getter ...
随机推荐
- java对象克隆复制
原文链接:https://blog.csdn.net/ztchun/article/details/79110096 自己先简单描述总结一下:当想要将一个对象中已有的值直接给另外一个对象的时候,其实并 ...
- JUnit5学习之五:标签(Tag)和自定义注解
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- CDN失效时使用本地js文件:window.jQuery || document.write
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></ ...
- 【pytest官方文档】解读fixtures - 1.什么是fixtures
在深入了解fixture之前,让我们先看看什么是测试. 一.测试的构成 其实说白了,测试就是在特定的环境.特定的场景下.执行特定的行为,然后确认结果与期望的是否一致. 就拿最常见的登录来说,完成一次正 ...
- 剑指 Offer 59 - II. 队列的最大值--滑动窗口的建模+Deque的基本使用(常用方法)
剑指 Offer 59 - II. 队列的最大值 题目链接 package com.walegarrett; /** * @Author WaleGarrett * @Date 2020/12/3 1 ...
- CCF(元素选择器:50分):字符串+模拟
元素选择器 201809-3 这里我只考虑了没有后代选择器的情况 #include<iostream> #include<cstdio> #include<cstring ...
- HDOJ-1213(简单并查集)
How many tables HDOJ-1213 #include<iostream> #include<cstring> #include<cstdio> #i ...
- PHP题库1
选择题11. php中,不等运算符是( B.C ) A ≠ B != C <> D >< 2. 函数的参数传递包括:( A.B ) A 按值传递 B ...
- groovy-map.each{}
ConfigDetail postEdiUrl(TtxSession sess, String code) { return cdSvc.getByRecordTypeAndIdentifier(se ...
- shell脚本,mysql数据库的备份-2[mysqldump]
# 数据库IPIP=127.0.0.1# 数据库端口PORT=3306# 数据库用户USER=root# 数据库密码PASSWORD=****# 要备份的数据库TARGET_DB=database_n ...