java反射获取对象属性和值(java反射获取属性)

  Java 的反射

image.png

  对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。

  反射中常见的类:

  理解反射机制时,首先熟悉一下几个类:

  1)Class类

  Class类实例表示正在运行的Java应用程序中的类和接口。Class是普通类、接口、枚举类、数组等的抽象,即它们的类型就是Class,它们是Class的实例。

  既然Class代表着类和接口,那么我们可以通过他的实例(字节码文件)来获取对应类或接口的信息,如:注解、修饰符、类型、类的名称、属性、方法、构造方法、直接父类和子类等,还有可以创建它的实例,但只能调用无参构造方法来创建。

  什么看不懂?举个栗子,我们都知道,生物可以分为动物、植物、微生物和病毒等,而动物又有人、喵星人、小狗等,植物、微生物和病毒也一样。同样,我们可以类比一下,生物就是Class,动物是普通类,植物是接口,微生物是枚举类、病毒是数组(枚举和数组是特殊的类),而人、喵星人、小狗是我们熟悉的对象,如图

  这下可整明白了吧,普通类、接口、枚举、数组其实都可以当做Class的对象。

  2)Field类

  Field表示类的属性,属性含有修饰符、类型、属性名称和值。所以可以通过Field的实例获取属性的修饰符、类型、属性名称,并且可以修改属性的值。

  3)Method类

  Method表示类的成员方法,方法包括注解、修饰符、返回类型、方法名,参数等。所以可以通过Method的实例获取方法的的信息,如,注解、修饰符、返回类型、方法名并且可以调用所表示的方法。

  4)Constructor类

  Constructor表示构造方法,可以通过Constructor的实例获取构造方法的信息,如,修饰符等,并且可以通过它来创建它所在类的的实例。

  5)Modifier类

  Modifier表示修饰符,可通过它来获取修饰符的信息,例如何种修饰符等

  6)Annotation

  Annotation代表注解。

  使用反射注意点:

  在获取Field,method,construtor的时候,应尽量避免使用getDelcaredXXX(),应该传进参数获取指定的字段,方法和构造器;

  使用缓存机制缓存反射操作相关元数据的原因是因为反射操作相关元数据的实时获取是比较耗时的。


发表评论

评论列表

还没有评论,快来说点什么吧~