Java 反射
2015-09-19 18:21
477 查看
概念
反射的概念主要是指程序可以访问,检测和修改它本身状态或行为的能力在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说这类应用通过采用某种机制
来实现自身行为的描述和检测,并能够根据自身行为的状态和结果,调整或修改应用所描述的状态和相关
的语义。
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 的字符串。 |
相关文章推荐
- struts2项目web.xml里加filter后,jsp页面不显示问题
- java的动态绑定与静态绑定
- 在MyEclipse中快捷键的使用
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Java的值传递和引用传递
- 64位windows8.1编译openjdk8
- org.eclipse.core.runtime.CoreException: 不能连接至 VM
- 64位windows8.1编译openjdk8
- Java 虚拟机中的存储的理解 堆栈 GC
- springMVC工作原理
- java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.forName(Ljava
- Java基础知识强化35:String类之String的其他功能
- JUnit使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
- 使用Spring MVC上传图片
- Netbeans 计算器设计
- Java程序设计基础(一)
- Struts2:实现多个文件同时上传代码
- Struts2:一个表单中提交多个请求的例子(多个提交按钮)
- 【SSH】——Struts2中的动态方法调用(一)
- eclipse的快捷键