java 反射

    技术2022-05-20  38

    把java类中的各种成分映射成相应的java类。

     

    Constructor 构造方法类

     

     以字节码的形式得到类的构造方法,它可以获得所属类,类的修饰符等

     

    Constructor的DEMO: 

    1,在类字节码上得到一个类的构造方法。

    2,用构造方法去创建一个实例对象。

      //StringBuffer.class获得方法时要用到的类型   Constructor c1=String.class.getConstructor(StringBuffer.class);   //调用获得的方法时要用相同类型的实例对象。   String str2=(String)c1.newInstance(new StringBuffer("abc"));   System.out.println(str2.charAt(1));

     

    --------------------------------------------------------------------------------------------------------------------------------------

    Field字段类:

    1,获取字节码上的变量

    2,指定从哪个类获取

     

    DEMO:

    public class ReflectPoint {  private int x;  public int y;    public ReflectPoint(int x, int y) {   super();   this.x = x;   this.y = y;  } }

     

     

     ReflectPoint pt1=new ReflectPoint(3,5);   Field fieldY=pt1.getClass().getField("y");   //FileldY是字节码类上的变量。要用它去取某个对象上的值。   System.out.println(fieldY.get(pt1));   //调用私有的 暴力反射   Field fieldX=pt1.getClass().getDeclaredField("x");   fieldX.setAccessible(true);//设为可访问   System.out.println(fieldX.get(pt1));

     

     

    //替换字符

    private static void changeStringValue(Object obj) throws Exception{   Field[] fields=obj.getClass().getFields();   for (Field field:fields) {    //只要对字节码比较用==比    //得到自己的类型,因为字节码只有一份所以用等号更合适    if(field.getType()==String.class){     String oldValue=(String)field.get(obj);     String newValue=oldValue.replace('b', 'a');     field.set(obj,newValue);    }   }     }

     

    --------------------------------------------------------------------------------------------------------------------

     

    Method类

    设置方法格式:

    Method methodVar=String.class.getMethod("方法名",参数类型);

    调用方法格式:

    methodVar.invoke(对象名,参数值);

     

     

     

     


    最新回复(0)