zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    梯度下降法-4.向量化和数据标准化
    梯度下降法-3.实现线性回归中的梯度下降法
    梯度下降法-2.线性回归中的梯度下降法
    梯度下降法-1.原理及简单实现
    线性回归算法-5.更多思考
    TCP/IP协议
    TFTP 服务器
    python3 系统编程进程
    python3 私有化 属性property
    python3 面向对象
  • 原文地址:https://www.cnblogs.com/joshua-aw/p/6020437.html
Copyright © 2011-2022 走看看