• Java反射机制


    反射:对类进行剖析

    说明:凡带有Declared的方法均返回所有(包含私有)

    1. 获取Class

      Class clazz = Class.forName(String classname);多用于类加载

      Class clazz =obj.getClass();多用于获取对象类型

      Class clazz =ClassName.class;多用于传递参数

    2. 获得构造函数

      Constructor[] constructors = clazz.getConstructors();

      Constructor[] constructors = clazz.getDeclaredConstructors();

      Constructor constructor = clazz.getConstructor(Class... args);  // null表示无参

      Constructor constructor = clazz.getDeclaredConstructor(Class... args);

    3. 获得类的属性

      Field[] fields = clazz.getFields();

      Field[] fields = clazz.getDeclaredFields();

      Field field = clazz.getField(String fieldname);

      Field field = clazz.getDeclaredField(String fieldname);

    4. 获得类的方法

      Method[] methods = clazz.getMethods();

      Method[] methods = clazz.getDeclaredMethods();

      Method method = clazz.getMethod(String methodname, Class... args);

      Method method = clazz.getDeclaredMethod(String methodname, Class... args);

    5. 使用Class

      Object obj = clazz.newInstance();调用无参构造函数

      clazz: getPackage、getInterfaces、getSuperclass ... isPrimitive(判断是否为基本类型)、isArray(判断是否为数组)

      JVM九个预定义的Class对象:八个基本类型.class + void.class

        int.class, byte.class, short.class, long.class, float.class, double.class, boolean.class, char.class, void.class

      其中:

        void.class == Void.TYPE

        int.class == Integer.TYPE; int.class != Integer.class;

        ...

      int.class.isPrimitive() == true; int[].class.isArray() == true;

    6. 使用Constructor

      Object obj = constructor.newInstance(Object... args);  // args可为null

    7. 使用Field

      私有:field.setAccessible(true);

      获取:Object value = field.get(Object obj);

      设置:field.set(obj, value);  // 属性属于对象,若要get或者set某一属性需要传入相应的对象

      获取类型:field.getType() == ClassName.class; // 可用于过滤数据

    8. 使用Method

      私有:method.setAccessible(true);

      调用方法:method.invoke(obj, ... args);  // args可为null

      invoke时,若是静态函数则将obj设为null

  • 相关阅读:
    Lucene
    SQL优化以及索引
    Mysql优化
    RocketMQ
    RocketMQ
    Session共享
    Linux安装Nginx
    初识nginx
    跨域,防止表单重复提交
    HttpClient案例
  • 原文地址:https://www.cnblogs.com/joshua-aw/p/6020437.html
Copyright © 2020-2023  润新知