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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马十八期0513 中级黑马   /  2013-1-18 11:39  /  1190 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

张孝祥老师视频中有一个用反射把任意一个类中的字符串成员字符a换成字符b的例子。我自己在写的时候出了一些问题,写出来让大家指教一下。
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
class Demo{
     public static void main(String[]args) throws Exception{
        Exercise e =new Exercise("agree","attack");  
  
       Trance(e);
       System.out.println("e="+e);
  
      Object obj =new Object();
  
     System.out.println(obj.getClass()==Class.forName("java.lang.Object"));
}
    public static void Trance(Object obj) throws Exception{
        Field []fields =obj.getClass().getDeclaredFields();   //获取包括隐藏的成员变量
        /*
        这里要用obj.getClass(),不能用Class.forName("java.lang.Object"),也不能用Objcet.class,
       否则就不能将传入参数的字符串成员变量的a改成b,而是把Object类中的字符串成员变量的a改成b
       获得Class类的方法有三种,但是这里只能用obj.getClass()这一种方法,因为此时的obj是参数对象,而不是变量。
       */
        System.out.println(obj.getClass()==Class.forName("java.lang.Object"));
      
        for(Field field:fields){
            field.setAccessible(true);    //设置访问权限
            if(field.getType()==String.class){
                String oldValue =(String)field.get(obj);
                String newValue =oldValue.replace('a','b');
                field.set(obj,newValue);
                        }
                }
        }
}

class Exercise{
public String s1="abc";
private String s2="access";
String s3="basket";
String s4="package";
String s5;
String s6;
int x;
int y;
public Exercise(String s5, String s6) {
  super();
  this.s5 = s5;
  this.s6 = s6;
}
public Exercise(int x,int y){
  this.x=x;
  this.y=y;
}
@Override
public String toString() {
  return "Exercise [s1=" + s1 + ", s2=" + s2 + ", s3=" + s3 + ", s4="
    + s4 + ", s5=" + s5 + ", s6=" + s6 + ", x="+x+", y="+y+"]";
}
}

3 个回复

倒序浏览
或者你也可以     String s   
回复 使用道具 举报
学习了....
回复 使用道具 举报
本帖最后由 zyx67786110 于 2013-1-20 14:14 编辑

确实是这样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马