Java反射机制知识
阅读原文时间:2023年07月08日阅读:1

modifier:修饰语 名词

JAVA 反射机制中,Field的getModifiers()方法返回int类型值表示该字段的修饰符。

其中,该修饰符是java.lang.reflect.Modifier的静态属性。

对应表如下:

PUBLIC: 1
PRIVATE: 2
PROTECTED: 4
STATIC: 8
FINAL: 16
SYNCHRONIZED: 32
VOLATILE: 64
TRANSIENT: 128
NATIVE: 256
INTERFACE: 512
ABSTRACT: 1024
STRICT: 2048

Java中反射获取类的成员时需要调用这几对方法的主要区别如下:
1. getFields()与getDeclaredFields()
   getFields()返回类中所有public的字段,包括从父类或接口继承的public字段;
   getDeclaredFields()返回本类中声明的所有字段,包括public、protected、private字段,不包括从父类或接口继承的字段

2. getMethods()与getDeclaredMethods()
    getMethods()返回类中所有public的方法,包括从父类或接口继承的public方法
    getDeclaredMethods()返回本类中声明的所有方法,包括public、protected、private方法,不包括从父类或接口继承的方法

3. getConstructors()与getDeclaredConstructors()
    getConstructors()返回类中所有public的构造方法;
    getDeclaredConstructors()返回类中声明的所有构造方法,包括public、protected、private构造方法

Class.getEnclosingClass 和 Class.getDeclaringClass

1、getDeclaringClass
  return the declaring class for this class
  获取对应类的声明类Class对象,
2、getEnclosingClass
  return the immediately enclosing class of the underlying class
  (获取对应类的直接外部类Class对象)

如果这个类或接口不属于任何其他类成员此方法返回null。如果此Class对象表示一个数组类,基本类型或void,则此方法返回null。

区别:
两者的区别在于匿名内部类的使用上、getEnclosingClass能够获取匿名内部类对应的外部类Class对象,而getDeclaringClass不能够获取匿名内部类对应的声明类Class对象。