java 反射和暴力反射 两个DEMO
</pre><pre code_snippet_id="402084" snippet_file_name="blog_20140622_5_9350254" name="code" class="java">
</pre><pre code_snippet_id="402084" snippet_file_name="blog_20140622_4_2588858" name="code" class="java">
<pre code_snippet_id="402084" snippet_file_name="blog_20140622_4_2588858" name="code" class="java">该类为反射函数 获取和暴力获取ReflectPoin类中的属性
</pre><pre code_snippet_id="402084" snippet_file_name="blog_20140622_6_9143294" name="code" class="java">package com.tuozou.test; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">public class ReflectTest {</span>
public ReflectTest() {// TODO Auto-generated constructor stub}//创建一个改变属性值的方法private static void changeStringValue(Object obj) throws IllegalArgumentException, IllegalAccessException{//建立一个Field的数组对象存放获取对象的多个属性Field[]
fields=obj.getClass().getFields();for(Field field:fields){//遍历对象//推断是否存在属性类型为字符串的类型if(field.getType() == String.class){//获取属性为String的对象 String oldValueString=(String)field.get(obj);//将新的字符串替换老的字符串String newValueString=oldValueString.replace("a", "b");//对配置的对象设值新值field.set(obj,
newValueString);}}}public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {// TODO Auto-generated method stub//System.out.println(pt1);//对ReflectPoint类的属性进行反射ReflectPoint
pt1=new ReflectPoint(3,5);//得到一个字段Field fieldY=pt1.getClass().getField("y");//取出在某个对象属性上的值System.out.println(fieldY.get(pt1));//同理取出其它对象上的值Field fieldX=pt1.getClass().getDeclaredField("x");//取出私有的时候是看不到的会报错//对于被设置为私有的属性 我们进行强制(暴力)反射 就是对要获取的属性进行setAccessible()fieldX.setAccessible(true);System.out.println(fieldX.get(pt1));changeStringValue(pt1);System.out.println(pt1);String
str1="abc";//用反射得到类中的某一个方法 用Method类来完毕 用str1对象身上的charAt(1) str1.charAt(1)Method methodChartAt=String.class.getMethod("charAt", int.class);System.out.println(methodChartAt.invoke(pt1.str2, 1));//这里是取出反射文件里的str2字符串的第二个单词System.out.println(str1.charAt(1));//当前对象中的第二个单词}}
该类为被反射的类
package com.tuozou.test;
public class ReflectPoint {
private int x;
public int y;
public String str1="able";
public String str2="apple";
public String str3="great";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public ReflectPoint() {
// TODO Auto-generated constructor stub
}
//为了能看到映射替换的效果 还有必要覆盖toString的方法
@Override
public String toString(){
return str1+":"+str2+":"+str3;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
java 反射和暴力反射 两个DEMO的更多相关文章
- java高级——暴力反射
反射,java中一个比较高级的应用,主要和开发中的框架紧密相连.今天我们就介绍一下他的特性之一,暴力反射.(听名字很恐怖呦) package wo; public class A{ public St ...
- Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式
1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
- java基础——类加载与反射
第1章 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. (1)加载 就是指将class文件读入内存,并为之创 ...
- 【java学习笔记】反射基础
一.反射 反射就是在剖析一个类,了解这个类的构造,创建这个类对应的对象. Class 代表字节码的类,代表类的类 Field 代表属性的类 Method 代表方法的类 Constructor 代表构造 ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
- Java基础学习(1)——反射
反射就是把Java类中的各种成分映射成相应的Java类(主要用于框架开发) 反射的基石–>Class类 Java程序中的各个类属于同一事物,描述这类事务的Java类名就是Class. Class ...
- Java学习:注解,反射,动态编译
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解 什么是注解 ? Annotat ...
- Java之Junit和反射
Junit,反射 Junit 1.测试的分类: 黑盒测试 : 不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试 : 需要进行代码的编写,关注的是程序的具体流程. 2.使用步骤(方法类的命 ...
随机推荐
- 微信小程序组件解读和分析:三、swiper滑块视图
swiper滑块组件说明: 滑块视图容器,用于展示图片,可以通过用户拖拽和设置自动切换属性控制图片的切换 组件的使用示例的运行效果如下: 下面是WXML代码: [XML] 纯文本查看 复制代码 ? ...
- canvas一周一练 -- canvas绘制中国银行标志(4)
运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...
- PHPStorm+XDebug进行调试
笔者的开发环境如下: Windows8.1+Apache+PhpStorm+XDebug+Firefox(XDebug helper 1.4.3插件). 一.XDebug安装配置 (1)下载XDebu ...
- dapper未将对象引用设置到对象的实例
现象是这样的dapper在reader.Read<T>()方法时报:未将对象引用设置到对象的实例 解决:实体类里属性类型与数据库表字段类型不匹配 我用的mysql varchar(50)保 ...
- 关于.Net的强名称(Strong Name)
下面是我在CSDN上发表的<关于.Net的强名称(Strong Name)>,转载于此. 关于.Net的强名称(Strong Name)
- Windows提高_2.2第二部分:用户区同步
第二部分:用户区同步 同步和互斥 同步:就是按照一定的顺序执行不同的线程 互斥:当一个线程访问某一资源的时候,其它线程不能同时访问 多线程产生的问题 #include <stdio.h> ...
- MFC_2.1使用单选和多选框
使用单选和多选框 单选 1.拖控件 设置名字,CTRL+D设置顺序,属性设置第一个GROUP为TRUE: 2.设置第一个按钮绑定变量为 值 INT型 名称m_RadioIndxe; 3.设置单击响应内 ...
- 梦想Android版CAD控件2018.7.26更新
下载地址: http://www.mxdraw.com/ndetail_109.html 1. 增加所有接口CHM帮助文档 2. 增加得到当前打开文件函数 3. 读写CAD扩展记录接口 4. 读写属性 ...
- ThinkPHP---TP功能类之公文管理功能
[一]准备工作 (1)创建数据表 表名:sp_doc create table sp_doc( id int(11) not null auto_increment, title varchar(50 ...
- Eigen库笔记整理(二)
Eigen/Geometry 模块提供了各种旋转和平移的表示 旋转矩阵直接使用 Matrix3d 或 Matrix3f Eigen::Matrix3d rotation_matrix = Eigen: ...