• 反射


    一、什么是反射?

    Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。

    通俗点讲:所谓反射其实是获取类的字节码文件,也就是.class文件,那么我们就可以通过Class这个对象进行获取。

    二、反射获取的三种方式

    1、通过对象.getClass()方法获取Class对象

     

    2直接通过类获取Class对象

    3通过类的全路径名获取Class对象会抛出一个异常,如果根据类路径找不到这个类那么就会抛出这个异常。

    第一种已经创建了对象,那么这个时候就不需要去进行反射了,显得有点多此一举。第二种需要导入类的包,依赖性太强。所以我们一般选中第三种方式。

     

     

    三、通过反射获取类的构造方法、方法以及属性

    1、获取构造方法

    getConstructors()获取所有的公用构造方法

    getDeclaredConstructors()获取所有构造方法

    .getConstructor(null)获得公有无参的构造方法

    .getConstructor(new Class[]{String.class,Integer.class})获得公有有参的构造方法

    .getDeclaredConstructor(new Class[]{String.class})获得私有有参的构造方法

    结果:

    2、获取类属性

    getFields()获得所有公共字段

    getDeclaredFields()获得所有字段(公共的,私有的)

    .getConstructor().newInstance();获得构造方法然后实例化

    .setAccessible(true);打开私有属性使其可以赋值

    结果

    1. 获取类中的方法

      .getMethods();获得所有public修饰的方法

      .getDeclaredMethods();获得所有方法

      结果

    、总结

    看到这里你已经对反射有了一个简单的了解,可以使用反射获取一些属性方法,其实我们平时写代码很少用到反射技术,但是在我们使用的一些主流框架中反射技术应用是非常广泛的,所以学好反射也是非常有必要的。

     

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/liqian-/p/12069614.html
Copyright © 2020-2023  润新知