鉴于之前用Java反射机制只停留在解决问题层次,并未深入去了解其中的内涵,所以忘记也比较快。最近时间比较富余,能静下心来研究一下,只做个人总结学习之用,如有高手遇见,仅作抛砖引玉之用。
首先来了解一下何为Java反射机制,请看下面一段文字:
反射(reflection)的概念是由Smith在1982年首次提出的主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。1Java反射机制原理反射是Java被认为是动态语言的一个非常重要的特性,它允许动态发现和绑定类、方法、字段,以及所有其他的由语言所产生的元素。也就是说,这类应用通过采用某种机制来实现对自己行为的描述和监测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。当前主流的计算反射原型系统大多是建立在元对象协议的体系结构上,Java语言的反射机制也是建立在这种体系结构之上。在Java反射系统中,有一部分程序用来描述和计算问题域,称之为应用程序(application program),而有一部分程序专门用来表达和控制应用程序的计算行为,称之为元程序(metaprogram),即程序的程序。元程序在整个系统所处的层次称为元级(meta-level)...摘自软件导刊2008年11期
|
用自己的话说,Java在被加载到JVM解释执行时是不可修改的,而反射机制的出现使得这种修改成为了可能,可以利用反射完成对象的赋值,方法的调用,动态代理类实现方法的调用等。
废话少说,首先要对反射中涉及到的接口和类有个大致的了解,才能做到心里有数。下面是从JDK帮助文档中摘抄下来的。
Java反射类都放在java.lang.reflect包下。
1)接口列表(仅举常用的):
InvocationHandler 代理实例的调用处理程序实现的接口。已知实现类 java.beans.EventHandler,
java.rmi.server.RemoteObjectInvocationHandler
主要方法: Object invoke(Object proxy,Method method,Object [] args);
proxy 在其上调用方法的代理实例
method 对应于在代理实例上调用的接口方法的Method实例。
args 包含传入代理实例上方法调用的参数值的对象数组。
Member 成员是一种接口,反映有关单个成员(字段或方法)或构造方法的标识信息。
已知实现java.lang.reflect.Cunstructor,java.lang.reflect.Field,java.lang.reflect.Method
主要方法:
int getName(); 获取成员变量的名称
String getModifiers(); 获取成员变量的修饰符。
ParameterizedType 表示参数化类型,如 Collection<String>。
主要方法:
Type[] getActualTypeArguments() 返回表示此类型实际类型参数的 Type 对象的数组。
AccessibleObject
是Field,Method和Constructor对象的基类。他提供了将反射的对象标记为在使用时取消默认Java语言访问控制检查的能力(依靠setAccessible(true)方法来实现)。对于公共成员、默认(打包)访问成员、受保护成员和私有成员,在分别使用 Field、Method 或 Constructor 对象来设置或获取字段、调用方法,或者创建和初始化类的新实例的时 候,会执行访问检查。
主要方法:
Annotation[] getAnnotations()返回此元素上存在的注释。
Annotation[] getDeclaredAnnotations() 返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
setAccessible(AccessibleObject[] array, boolean flag)
使用单一安全性检查(为了提高效率)为一组对象设置 accessible 标志的便捷方法。
setAccessible(boolean flag) 为单一对象设置accessible标志。
Filed 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例
字段 终极类,继承了AccessibleObject,实现了Member接口。
setInt(),setLong,setBoolean()等方法实现动态给Filed赋值。
Method
提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包
括抽象方法)终极类,继承了AccessibleObject,实现了Member、ParamterizedType接口。
主要方法:
Annotation[] getAnnotations()
Annotation[] getDeclaredAnnotations()
Type[] getGenericParameterTypes()
按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的。
Class<?>[] getParameterTypes()
按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。
Cunstructor 提供关于类的单个构造方法的信息以及对它的访问权限。
Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
例如:创建某一接口 Foo 的代理:
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
new Class[] { Foo.class },
handler);
本章节暂时记录到这,下一节继续。
分享到:
相关推荐
这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...
通过本文的学习,我们深入了解了Java反射机制的基本概念、原理以及应用。Java反射机制为Java程序提供了一种强大的动态处理能力,使得Java不仅仅局限于静态类型语言的功能限制。掌握Java反射机制对于开发者来说是非常...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制对于理解和实现高级框架、动态代理、元数据处理等场景至关重要。以下是对Java反射机制的详细说明:...
Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...
在"JAVA反射机制学习"资料中,你将深入理解这一关键概念。 首先,我们要明白什么是反射。在Java中,反射是一种在运行时分析类、接口、字段和方法的能力。通过使用`java.lang.Class`对象,我们可以获取任何类的信息...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念:在程序运行时,通过Class对象获取类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用方法。...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...
Java反射机制是Java编程语言中的一种强大功能,它允许程序在运行时检查和操作类、接口、字段和方法的信息,即使在编译时这些信息是未知的。这一特性使得Java在某种程度上具备了动态语言的特性,尽管Java本身是一种...
本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...
Java反射机制是Java编程语言中的一个强大特性,...通过学习和实践Java反射机制,你可以更深入地理解Java的运行机制,并在需要动态性、灵活性的场景中发挥其强大的功能。不过,使用反射时也应注意潜在的风险和性能影响。
总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...
Java反射机制是Java编程语言中一个...通过阅读"1139760298222java.pdf"这份文档,你可以更深入地理解Java反射机制,并结合实际示例学习如何在项目中有效利用这一特性。记得在实际操作中结合代码实践,以巩固理论知识。
Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...
Java反射机制是Java编程语言中一个强大的特性,它允许运行时的程序动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`...
通过这个例子,新手可以学习到如何使用Java反射机制来增强代码的动态性,以及如何设计可扩展的系统。反射在很多场景下都很有用,例如在插件系统、序列化、动态代理等领域都有广泛应用。然而,需要注意的是,反射也...
Java反射机制是Java编程语言中一个强大的特性,它允许运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性以及处理数组等。在本篇讲解中,我们将深入理解如何通过反射来执行方法、操作属性以及处理...