Java 反射

概念

反射的概念主要是指程序可以访问,检测和修改它本身状态或行为的能力
在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说这类应用通过采用某种机制
来实现自身行为的描述和检测,并能够根据自身行为的状态和结果,调整或修改应用所描述的状态和相关
的语义。
Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无须再组件之间
进行连接。反射允许在编写和执行时,使程序代码能够接入装载到JVM中的类的内部信息,而不是源码中选
定的类协作的代码。

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

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。

Class object 诞生管道

方法 意义
static Class forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。
ClassLoader getClassLoader() 返回该类的类加载器。
Field getDeclaredField(String name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。(本类所特有)
Field[] getDeclaredFields() 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Field getField(String name) 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段(继承自父类或接口)。
Field[] getFields() 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。(继承自父类或接口)
Method getDeclaredMethod(String name, Class… parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
Method[] getDeclaredMethods() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Method getMethod(String name, Class… parameterTypes) 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method[] getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
ClassgetSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
T newInstance() 创建此 Class 对象所表示的类的一个新实例。
String toString() 将对象转换为字符串。
Class[] getInterfaces() 确定此对象所表示的类或接口实现的接口。

Constructor 构造方法

方法 意义
int getModifiers() 以整数形式返回此 Constructor 对象所表示构造方法的 Java 语言修饰符。
String getName() 以字符串形式返回此构造方法的名称。
T newInstance(Object… initargs) 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
Type[] getGenericParameterTypes() 按照声明顺序返回一组 Type 对象,这些对象表示此 Constructor 对象所表示的方法的形参类型。
Class[] getParameterTypes() 按照声明顺序返回一组 Class 对象,这些对象表示此 Constructor 对象所表示构造方法的形参类型。

Modifier

属性 意义
static int ABSTRACT 表示 abstract 修饰符的 int 的值。
static int FINAL 表示 final 修饰符的 int 值。
static int INTERFACE 表示 interface 修饰符的 int 的值。
static int NATIVE 表示 native 修饰符的 int 的值。
static int PRIVATE 表示 private 修饰符的 int 值。
static int PROTECTED 表示 protected 修饰符的 int 值。
static int PUBLIC 表示 public 修饰符的 int 值。
static int STATIC 表示 static 修饰符的 int 值。
static int STRICT 表示 strictfp 修饰符的 int 的值。
static int SYNCHRONIZED 表示 synchronized 修饰符的 int 值。
static int TRANSIENT 表示 transient 修饰符的 int 的值。
static int VOLATILE 表示 volatile 修饰符的 int 值。
方法 意义
static String toString(int mod) 返回描述指定修饰符中的访问修饰符标志的字符串。
修饰符 十进制代码 二进制代码
public: 1 1
private 2 10
protected 4 100
static 8 1000
final 16 10000
synchronized 32 100000
VOLATILE 64 1000000
transient 128 10000000
native 256 100000000
interface 512 1000000000
abstract 1024 10000000000
strict 2048 100000000000

Field

方法 意义
Object get(Object obj) 返回指定对象上此 Field 表示的字段的值。
int getModifiers() 以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符。
String getName() 返回此 Field 对象表示的字段的名称。
Class getType() 返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
void set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
String toGenericString() 返回一个描述此 Field(包括其一般类型)的字符串。
String toString() 返回一个描述此 Field 的字符串。

Method

方法 意义
int getModifiers() 以整数形式返回此 Method 对象所表示方法的 Java 语言修饰符。
String getName() 以 String 形式返回此 Method 对象表示的方法名称。
Class[] getParameterTypes() 按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。
Class getReturnType() 返回一个 Class 对象,该对象描述了此 Method 对象所表示的方法的正式返回类型。
Object invoke(Object obj, Object… args) 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
String toString() 返回描述此 Method 的字符串。

你可能感兴趣的:(java,反射)