zoukankan      html  css  js  c++  java
  • 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的访问控制检查

      

  • 相关阅读:
    OI回忆录
    【CSP2019】题解合集
    微电影《Junior·BQB》——剧本
    【UOJ139】【UER #4】被删除的黑白树
    NOIWC2019 冬眠记
    THUWC2019 划水记
    【XSY3413】Lambda
    【BZOJ3065】带插入区间k小值
    【BZOJ3600】没有人的算术
    【BZOJ4864】【BJWC2017】神秘物质
  • 原文地址:https://www.cnblogs.com/xxx-xxx/p/3588817.html
Copyright © 2011-2022 走看看