黑马程序员技术交流社区
标题:
反射的练习
[打印本页]
作者:
Sakuratossi
时间:
2014-8-31 23:29
标题:
反射的练习
import java.lang.reflect.Array;
import java.lang.reflect.Field;
public class ReflectDemo {
public static void main(String[] args) {
ReflectFieldDemo rfd = new ReflectFieldDemo();
changFieldValue(rfd);
System.out.println(rfd);
String[] s = new String[]{"abc","a","bsk"};
int[] i = {1,2,5,6};
String s1 = "hello";
int i1 = 37;
System.out.println("_____________________________________");
printObject(s);
printObject(i);
printObject(s1);
printObject(i1);
}
//打印一个对象,如果对象是数组,打印它的每一个元素。
// java.lang.reflect.Array
public static void printObject(Object obj)
{
Class clazz = obj.getClass();
if(clazz.isArray())
{
int len = Array.getLength(obj);
for(int i = 0; i < len; i++)
{
System.out.println(obj + ": "+Array.get(obj, i));
}
}
else
System.out.println(obj);
}
// 将一个对象中的String字段出现的b全改成a
public static void changFieldValue(Object obj)
{
Field[] fields = obj.getClass().getFields(); //只能得到public修饰的字段!!!
String oldStrValue = null;
String newStrValue = null;
for(Field field : fields)
{
//如果这个字段所属的是字节码 是 String类型的
//Filed 类中有getType,得到字段的字节码所属类型 不是这样写的 !if(field.getClass() == String.class)
if(field.getType() == String.class) //不用 equals,不明白为什么不能用?equals比较值
{
try {
oldStrValue = (String) field.get(obj);
newStrValue = oldStrValue.replace('b', 'a');
field.set(obj, newStrValue);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("以前的String变量:"+ field.getName()+",值是:"+oldStrValue
+"现在的值是:"+newStrValue);
}
}
}
}
复制代码
作者:
dhgcy
时间:
2014-9-1 22:32
谢谢分享 学习学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2