• Java的反射机制


    一、可以打破对象的封装

     1. ①获得对象的Class对象(三个方法)

        a)使用Class类的静态方法 forName; Class.forName("java.lang.String");

        b)使用类的.class语法  Srting.class;

        c)使用对象的getClass方法 String s = "aa";    Class<?> cla = s.getClass();

      2. ①若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
        a) 先获得 Class 对象,然后通过该 Class 对象的 newInstance()方法直接生成即可:
          Class<?> classType = String.class;
          Object obj = classType.newInstance();
        b) 先获得 Class 对象,然后通过该对象获得对应的 Constructor 对象,再通过该 Constructor
          对象的 newInstance()方法生成:
          Class<?> classType = Customer.class;
          Constructor cons = classType.getConstructor(new Class[]{});
          Object obj = cons.newInstance(new Object[]{});
      ② 若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式:
          Class<?> classType = Customer.class;
          Constructor cons = classType.getConstructor(new Class[]{String.class, int.class});
          Object obj = cons.newInstance(new Object[]{“hello”, 3});

      3.①获取对象的所有成员变量 通过Class对象的getDeclareFields(); 返一个Field[];

       获取指定的成员变量 通过Class对象的getDeclareField("name"); 返回field对象

      ②获取对象的所有方法 通过Class对象的getDeclareMethods(); 返一个Method[];

       获取指定的方法 通过Class对象的getDeclareMethod("name"); 返回fMethod对象

     4.      setAccessible(boolean flag)
               Set the accessible flag for this object to the indicated boolean value.

        method.setAccessible(true);//压制Java的访问控制检查

        field.setAccessible(true);//压制Java的访问控制检查

      

  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/xxx-xxx/p/3588817.html
Copyright © 2020-2023  润新知