A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© Sakuratossi 中级黑马   /  2014-8-31 23:29  /  947 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



  1. import java.lang.reflect.Array;
  2. import java.lang.reflect.Field;

  3. public class ReflectDemo {
  4.        
  5.         public static void main(String[] args) {
  6.                 ReflectFieldDemo rfd = new ReflectFieldDemo();
  7.                 changFieldValue(rfd);
  8.                 System.out.println(rfd);
  9.                
  10.                 String[] s = new String[]{"abc","a","bsk"};
  11.                 int[] i = {1,2,5,6};
  12.                 String s1 = "hello";
  13.                 int i1 = 37;
  14.                
  15.                 System.out.println("_____________________________________");
  16.                 printObject(s);
  17.                 printObject(i);
  18.                 printObject(s1);
  19.                 printObject(i1);
  20.         }
  21.         //打印一个对象,如果对象是数组,打印它的每一个元素。
  22.         // java.lang.reflect.Array
  23.         public static void printObject(Object obj)
  24.         {
  25.                 Class clazz = obj.getClass();
  26.                 if(clazz.isArray())
  27.                 {
  28.                         int len = Array.getLength(obj);
  29.                         for(int i = 0; i < len; i++)
  30.                         {
  31.                                 System.out.println(obj + ": "+Array.get(obj, i));
  32.                         }       
  33.                 }
  34.                 else
  35.                         System.out.println(obj);
  36.         }
  37.        
  38.         // 将一个对象中的String字段出现的b全改成a
  39.         public static void changFieldValue(Object obj)
  40.         {
  41.                 Field[] fields = obj.getClass().getFields();  //只能得到public修饰的字段!!!
  42.                 String oldStrValue = null;
  43.                 String newStrValue = null;
  44.                
  45.                 for(Field field : fields)
  46.                 {
  47.                         //如果这个字段所属的是字节码 是 String类型的
  48.                         //Filed 类中有getType,得到字段的字节码所属类型  不是这样写的 !if(field.getClass() == String.class)
  49.                         if(field.getType() == String.class)  //不用 equals,不明白为什么不能用?equals比较值
  50.                         {

  51.                                 try {
  52.                                         oldStrValue = (String) field.get(obj);
  53.                                         newStrValue = oldStrValue.replace('b', 'a');
  54.                                         field.set(obj, newStrValue);
  55.                                 } catch (IllegalArgumentException e) {
  56.                                         // TODO Auto-generated catch block
  57.                                         e.printStackTrace();
  58.                                 } catch (IllegalAccessException e) {
  59.                                         // TODO Auto-generated catch block
  60.                                         e.printStackTrace();
  61.                                 }
  62.                                
  63.                                 System.out.println("以前的String变量:"+ field.getName()+",值是:"+oldStrValue
  64.                                                 +"现在的值是:"+newStrValue);
  65.                         }
  66.                
  67.                 }
  68.         }
  69.        
  70. }
复制代码

1 个回复

倒序浏览
谢谢分享  学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马