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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.guoqing.day01;
import java.lang.reflect.*;
public class ReflectTest1 {
/**
  * @param args
  */
public static void main(String[] args) throws Exception {
  Constructor constructor1=String.class.getConstructor(StringBuffer.class);
  String str1=(String) constructor1.newInstance(new StringBuffer("abcde"));
  System.out.println(str1.charAt(3));
  ReflectPoint pt1=new ReflectPoint(3,4);
  Field fieldY=pt1.getClass().getField("y");
//  此时的fieldY的值不是4,因为fieldY不是对象身上的变量,而是类上的(字节码上的变量),要用它去取某个对象上对应的值(通过下面的那行代码)
  int valuey=fieldY.getInt(pt1);
  System.out.println(valuey);
  Field fieldX=pt1.getClass().getDeclaredField("x");//通过getDeclaredFiel()方法获取字段x.(私有的看不见时)
  fieldX.setAccessible(true);//因为成员变量x是私有的,所以要把该字段设置成可获取的                           (看见了拿不到时)
  int valuex=fieldX.getInt(pt1);//获取字段x在pt1对象中的数值。俗称暴力反射。
  System.out.println(valuex);
  
  changeStringValus(pt1);//调用字符替换方法
  System.out.println(pt1);;//打印对象的相关信息
  
}
//定义一个功能,将字符串中一个字符用另外的字符替换
private static void changeStringValus(ReflectPoint pt1) throws Exception {
  Field[] fields=pt1.getClass().getFields();//获取字节码对象中的字段
//  遍历符合条件的字段,并进行字符的替换
  for(Field field:fields){
   if(field.getType()==String.class){
    String oldvalues=(String)field.get(pt1);//在这里为什么要加上一个类型转换 。  get方法中返回的类型:如果该字段是一个基本类型字段,则在返回前将该值包装在一个对象中,否则照原样返回,这句话是什么意思,求指教
    String newvalues=oldvalues.replace('b','a');
    field.set(pt1, newvalues);//设置指定对象中的字段的值
   
   }
   
  }
  
}
}


package cn.guoqing.day01;
public class ReflectPoint {
private int x;
public int y;
public String str2="ball";
public String str3="basseketball";
public String str4="xinlang";
public ReflectPoint(int x, int y) {
  super();
  this.x = x;
  this.y = y;
}
@Override
public String toString() {
  return "ReflectPoint [str2=" + str2 + ", str3=" + str3 + ", str4="
    + str4 + "]";
}


}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马