java 反射和暴力反射 两个DEMO
2014-06-22 16:00
267 查看
</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网络编程入门的两个demo(TCP+UDP)
- java反射生成DAO【demo】
- Java反射的DEMO
- java反射学习-以demo加理伦
- java【反射】: hibernate 更新EntityBean时 两个类 之间的赋值
- java 反射demo
- 利用java反射实现两个具有相同属性bean赋值
- Java反射Demo
- java/android 反射demo,通俗易懂,你值得拥有!!!
- java 反射 demo
- Java 反射(成员方法) 相当暴力啊 暴力反射
- Java 反射(属性) 相当暴力啊 暴力反射
- Java 反射(构造方法) 相当暴力啊 暴力反射
- java 反射机制 Demo 练习
- java对类私有变量的暴力反射
- 利用java反射实现两个具有相同属性bean赋值
- Java反射之方法反射demo
- java 反射的学习demo