Java是一种面向对象的语言,万事万物都可以用Java语言来进行抽象描述,同样的,对于Java对象本身,也可以用Java语言进行抽象描述,我们把这种对Java语言本身的抽象称之为反射。通过反射可以使我们更便利的对Java对象进行操作。
Class类是对所有的java类的抽象,包括Object。 Class 类的对象表示正在运行的 Java 应用程序中的类和接口。获取一个对象的反射对象,可以通过调用getClass()方法实现,也可以采用类名.class的方式实现。
核心方法: Field getDeclaredField(String name) :根据传入的属性的名称获取Java对象指定属性的对象,可获取私有属性。 Field[] getDeclaredFields(): 获取当前类所有的属性的对象构成的数组。 Field getField(String name) :根据传入的属性的名字获取一个公有属性的对象。 Field[] getFields() :获取当前类所有的公有属性构成的数组。 Class getClass() :获取当前对象所在的类的抽象。 T newInstance():获取当前反射对象所属的类的一个实例。 Method getDeclaredMethod(String name, Class<?>... parameterTypes):根据方法的名字和参数列表获取指定方法对象。 Method[] getDeclaredMethods():获取所有非继承的方法对象。 Method getMethod(String name, Class<?>... parameterTypes):根据方法的名字和参数化列表获取指定public方法对象。 Method[] getMethods():获取所有public方法对象,允许获取继承的方法。 Constructor<T> getConstructor(Class<?>... parameterTypes):根据传入的形参,返回指定构造器对象。
Field类是对当前类的属性的抽象,是属性的反射对象, 表示任何一个类中的属性。
核心方法: Object get(Object obj):根据传入的对象获取该对象当前属性的值。 void setAccessible(boolean flag):设置是否允许直接访问私有属性。 void set(Object obj, Object value):根据传入的对象和传入的值给当前属性的反射对象赋值。 int getModifiers():以整数形式返回由此 Field 对象表示的属性的限定符。 Class<?> getType():返回此 Field 对象所表示属性的类型。 String getName():返回此 Field 对象表示的属性的名称
Method类代表Java类中方法的反射对象,包含了方法的一些属性(限定符 返回值类型 方法的名字 参数化列表 )
核心方法: int getModifiers():以整数形式返回此 Method 对象所表示方法限定符。 String getName():返回此 Method 对象表示的方法名称。 Class<?>[] getParameterTypes():按照参数列表的顺序返回所有参数的类型反射对象。 Class<?> getReturnType():获取当前方法返回值类型的反射对象。 Object invoke(Object obj, Object... args):在指定的对象上通过指定的参数执行指定的方法。 Annotation[] getDeclaredAnnotations():返回直接存在于当前方法上的所有注解。
Constructor类提供关于类的单个构造方法的信息以及对它的调用。
核心方法: public Class<T> getDeclaringClass():返回声明类 public String getName():返回构造器的名称 public int getModifiers():返回构造修饰符 T newInstance(Object... initargs):通过传入的参数构建当前构造器所在的对象。