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 ...
随机推荐
- Redis与Spring Data Redis
1.Redis概述 1.1介绍 官网:https://redis.io/ Redis是一个开源的使用ANSIC语言编写.支持网络.可基于内存 亦可持久化的日志型.Key-Value型的高性能数据库. ...
- 程序员如何在VsCode上看基金?
一 我是一个程序员. 代码是我的禁锢,基金是我的自由. 打破禁锢,奔向自由,也许只差几个定投. 有人说,买基金一定要心态好,要学会风险对冲,把8成的钱全仓买基金,剩余2成买意外身亡险,基金大涨就赚,基 ...
- Spring @Transactional注解和ReentrantLock同步锁同时使用不能同步的问题
结论:如果在service层的方法上同时使用事务和同步锁无法保证数据同步. 1 @Service 2 public class ServiceImpl{ 3 4 private static Lock ...
- wxWidgets源码分析(3) - 消息映射表
目录 消息映射表 静态消息映射表 静态消息映射表处理过程 动态消息映射表 动态消息映射表处理过程 消息映射表 消息是GUI程序的核心,所有的操作行为均通过消息传递. 静态消息映射表 使用静态Event ...
- 企业安全_DNS流量监控的技术选型
方案1 Windows server n ---> packbeat ---> logstash ---> kafka | ┗ ---------> elasticsearch ...
- go 在crontab里面运行报错 解决方案
问题背景 你高高兴兴的写好了一个go脚本,放到你的服务器上,打算定期运行这个脚本,你打开crontab -e, 然后输入: */1 * * * * go run /root/test/main.go ...
- ICPC题目选讲
Traveling in the grid world 题目描述 有一个 \(n\times m\) 的格点图,两点之间走他们的连线,但是这条连线不能恰好覆盖其他整点.还要求相邻两步之间的连线不能斜率 ...
- 01-静态web服务器(Python)-面向对象的对比
普通写法,静态web服务器: 先创建TCP服务器套接字,然后等待客户端(这里是浏览器)请求连接. 客户端发起请求,用线程来处理连接的建立,这样可以实现多任务(也就是并发) 连接后根据请求发送指定页面 ...
- 让你弄懂js中的闭包
目录 闭包 闭包如何产生 闭包是什么 常见的闭包 闭包的作用 闭包的生命周期 闭包的应用 闭包的缺点 内存泄露 内存溢出 闭包面试题 闭包 之前在我执行上下文执行上下文栈这篇文章中,出现了这样一个题目 ...
- RabbitMQ 入门 (Go) - 2. 发布和接收消息
本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...