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

  • 相关阅读:
    vs已停止工作
    2.3.4 工具运行和错误解决方法
    vs2010 :0X80041FEB 程序集无法修改版等内容
    VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
    栅格计算器中空间分析函数
    设备系统,个人消费系统
    知己知彼
    ASP.NET MVC 实现二级域名
    自定义ASP.NET MVC Html辅助方法
    MVC系统过滤器(局部缓存,局部动态)
  • 原文地址:https://www.cnblogs.com/joshua-aw/p/6020437.html
Copyright © 2011-2022 走看看