java高级——暴力反射
反射,java中一个比较高级的应用,主要和开发中的框架紧密相连。今天我们就介绍一下他的特性之一,暴力反射。(听名字很恐怖呦)
package wo;
public class A{
public String x="abc";
private String y="bbc";
}
package wo; import java.lang.reflect.Field; public class B { public static void main(String[] args) throws Exception{
A a=new A(); //对public修饰的成员字段x进行反射
Field fx=a.getClass().getField("x");
System.out.println(fx.get(a)); //对A类中私有成员字段y进行暴力反射
Field fy=a.getClass().getDeclaredField("y");
fy.setAccessible(true);
System.out.println(fy.get(a));
} }
对于上面代码,定义了A和B两个类,在B类中new了A类的一个实例( A a=new A());
这时们就可以通过这个实例反射来获取a引用的对象的的共有字段x的值(x="abc")。
但是A类私有字段y我们却无法获取,这是我们想到了暴力反射。
原理是通过实例a的getClass()方法先获取到a所属的类的字节码,然后调用getDeclaredField("y")方法获取A类所有字段(包括私有);
此时虽然获取到了私有字段y,但是我们却无法查看y的值;
继续看,既然已经拿到了私有字段y,我们可以利用反射包中字段对象的setAccessible(true)方法来重新设置字段y,时期私有特性暂时失效;
继续,我们就可以利用get()方法获取到A类私有字段y的值为"bbc"。
至此,暴力反射成功。
java高级——暴力反射的更多相关文章
- Java 高级基础——反射
Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性——反射机制(第三篇)
获取类运行时的结构 通过反射获取运行时类的完整结构 Field.Method.Constructor.Superclass.Interface.Annotation >实现的全部接口 >所 ...
- Java高级特性——反射
感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ...
- JAVA高级特性反射和注解
反射: 枚举反射泛型注解.html34.3 KB 反射, 主要是指通过类加载, 动态的访问, 检测和修改类本身状态或行为的一种能力, 并能根据自身行为的状态和结果, 调整或修改应用所描述行为的状态和相 ...
- Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...
- Java高级特性——反射机制(第一篇)
——何为动态语言,何为静态语言?(学习反射知识前,需要了解动态语言和静态语言) 动态语言 >是一类在运行时可以改变其结构的语言,例如新的函数.对象.甚至是代码可以被引进,已有的函数可以被删除或者 ...
- Java高级特性—反射和动态代理
1).反射 通过反射的方式可以获取class对象中的属性.方法.构造函数等,一下是实例: 2).动态代理 使用场景: 在之前的代码调用阶段,我们用action调用service的方法实现业务即可. 由 ...
- Java高级篇反射和注解
反射是什么? 反射的作用?能带来什么好处? 反射的使用? 注解的使用? 注解和反射配合实战...
随机推荐
- Flask_URL和视图
1.Flask_URL和视图 1.1.第一个flask程序 from flask import Flask #创建一个Flask对象,传递__name__参数进去 app = Flask(__na ...
- Centos下MongoDB数据库的安装以及配置开机自启动(三)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...
- Spark RDD概念学习系列之RDD接口
不多说,直接上干货!
- 利用IOC—— Castle进行对象映射,以及结合Nhibernate访问数据库
相信很多人对IOC这个概念并不陌生,简而言之其核心就是利用反射来创建对象来实现解耦. 具体这么做解耦的好处是什么,因为鄙人做的项目还不多,所以还没体会到. 但好的项目大概是这样的 就是实现“高内聚,低 ...
- UWP tips (与wp8.1的不同)
一.异步调用之后,要更新UI时,代码如下 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =&g ...
- 路飞学城Python-Day37(practise)
#1.自行创建测试数据 create database homework; use homework; # 年级表->老师表->课程表->班级表->学生表->成绩表-&g ...
- How Many Partitions Does An RDD Have
From https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/performance_optimization ...
- Python数据分析8-----网页文本处理
1.去除网页的标签,如<br/> from bs4 import BeautifulrSoup preData=BeautifulSoup(data,'html.parser').get_ ...
- NodeJS加密算法(转)
nodejs中常用加密算法 1.Hash算法加密: 创建一个nodejs文件hash.js,输入内容如下: 1 var crypto = require('crypto'); //加载crypto ...
- PHP内置SOAP扩展客户端的使用例子
SOAP已经是属于OUT范畴的技术了,不过因为历史原因,时不时还是会用到它,以前都是用NuSOAP,现在准备试试PHP内置的SOAP扩展.由于文本只打算说说客户端的用法,所以得先找一些能直接用的服务端 ...