黑马程序员技术交流社区
标题:
今天对于反射的学习理解,分享与交流
[打印本页]
作者:
mengxiang1993
时间:
2015-2-6 21:36
标题:
今天对于反射的学习理解,分享与交流
package com.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class MyReflect {
public static void main(String[] args) throws Exception {
// ReflectPoint re = new ReflectPoint(3, 5);
// 通过反射拿到和该类相关联的构造方法类,指定参数是明确该类的哪个构造方法
Constructor constructor = ReflectPoint.class.getConstructor(int.class,
int.class);
// 获取和该构造方法相关联的类
Class c = constructor.getDeclaringClass();
System.out.println(c);
ReflectPoint re2 = (ReflectPoint) constructor.newInstance(6, 8);
Field fieldY = re2.getClass().getField("y");
Field fieldX = re2.getClass().getDeclaredField("x");
fieldX.setAccessible(true);
int y = (Integer) fieldY.get(re2);
int x = (Integer) fieldX.get(re2);
System.out.print(y);
System.out.print(x);
/*
* 以下是三种获取Classl类的方法
*/
Field fields1 = re2.getClass().getDeclaredField("s1");
// Field fields1=ReflectPoint.class.getDeclaredField("s1");
// Field fields1 = Class.forName("com.reflect.ReflectPoint")
// .getDeclaredField("s1");
fields1.setAccessible(true);// 暴力反射,强制该类私有属性可见
// 这个比较简便获取类的实例对象,但该类必须有一个无参的构造方法
// ReflectPoint ref = ReflectPoint.class.newInstance();
// 如果该类没有无参的构造方法,且具备有参数的构造方法,用下面这两行代码获取类实例,即通过拿到构造方法对象con,通过con的NewInstance方法
/*
* Constructor
* con=ReflectPoint.class.getConstructor(int.class,int.class);
* ReflectPoint ref=(ReflectPoint) con.newInstance(9,9);
*/
// 和该类相关联的属性类通过get(该类对象),拿到属性值
// String s = (String) fields1.get(ref);
// System.out.println(s);
changeValue(re2);
System.out.print(re2);
}
private static void changeValue(Object obj) throws Exception {
// 拿到和这个类相关的所有变量类
Field[] fields = obj.getClass().getFields();
// 遍历变量类
for (Field f : fields) {
// 如果变量类的字节码与String的字节码相同
if (f.getType() == String.class) {
// 则通过get(这个类对象)拿到变量值
String s = (String) f.get(obj);
String newValue = s.replace('b', 't');
f.set(obj, newValue);
}
}
}
}
复制代码
希望大家多多交流,指出理解的误区
作者:
phil
时间:
2015-2-6 21:51
这好像是视频的代码,你是怎么理解的呢?
作者:
huangchunwei
时间:
2015-2-7 09:10
加油,,正在努力学习中。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2