Java
反射机制
<!---->
<o:p>
</o:p>
<o:p>
</o:p>
摘要<o:p></o:p>
Reflection
是
Java
被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过
Reflection APIs
取得任何一个已知名称的
class
的内部信息,包括其
modifiers
(诸如
public, static
等等)、
superclass
(例如
Object
)、实现之
interfaces
(例如
Cloneable
),也包括
fields
和
methods
的所有信息,并可于运行时改变
fields
内容或唤起
methods
。本文借由实例,大面积示范
Reflection APIs
。
<o:p>
</o:p>
<o:p>
</o:p>
关于本文:<o:p></o:p>
读者基础:具备
Java
语言基础。
<o:p>
</o:p>
本文适用工具:
JDK1.5<o:p></o:p>
<o:p>
</o:p>
关键词:<o:p></o:p>
Introspection
(内省、内观)
<o:p>
</o:p>
Reflection
(反射)
<o:p>
</o:p>
<o:p>
</o:p>
<o:p>
</o:p>
有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技术与作法。我们朗朗上口动态绑定(
dynamic binding
)、动态链接(
dynamic linking
)、动态加载(
dynamic loading
)等。然而
“
动态
”
一词其实没有绝对而普遍适用的严格定义,有时候甚至像对象导向当初被导入编程领域一样,一人一把号,各吹各的调。
<o:p>
</o:p>
<o:p>
</o:p>
一般而言,开发者社群说到动态语言,大致认同的一个定义是:
“
程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言
”
。从这个观点看,
Perl
,
Python
,
Ruby
是动态语言,
C++
,
Java
,
C#
不是动态语言。
<o:p>
</o:p>
<o:p>
</o:p>
尽管在这样的定义与分类下
Java
不是动态语言,它却有着一个非常突出的动态相关机制:
Reflection
。这个字的意思是
“
反射、映象、倒影
”
,用在
Java
身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的
classes
。换句话说,
Java
程序可以加载一个运行时才得知名称的
class
,获悉其完整构造(但不包括
methods
定义),并生成其对象实体、或对其
fields
设值、或唤起其
methods
1
。这种
“
看透
class
”
的能力(
the ability of the program to examine itself
)被称为
introspection
(
内省、内观、反省
)。
Reflection
和
introspection
是常被并提的两个术语。
<o:p>
</o:p>
<o:p>
</o:p>
Java
如何能够做出上述的动态特性呢?这是一个深远话题,本文对此只简单介绍一些概念。整个篇幅最主要还是介绍
Reflection APIs
,也就是让读者知道如何探索
class
的结构、如何对某个
“
运行时才获知名称的
class
”
生成一份实体、为其
fields
设值、调用其
methods
。本文将谈到
java.lang.Class
,以及
java.lang.reflect
中的
Method
、
Field
、
Constructor
等等
classes
。
<o:p>
</o:p>
<o:p>
</o:p>
“
Class
”
class<o:p></o:p>
众所周知
Java
有个
Object class
,是所有
Java classes
的继承根源,其内声明了数个应该在所有
Java class
中被改写的
methods
:
hashCode()
、
equals()
、
clone()
、
toString()
、
getClass()
等。其中
getClass()
返回一个
Class object
。
<o:p>
</o:p>
<o:p>
</o:p>
Class class
十分特殊。它和一般
classes
一样继承自
Object
,其实体用以表达
Java
程序运行时的
classes
和
interfaces
,也用来表达
enum
、
array
、
primitive Java types
(
boolean, byte, char, short, int, long, float, double
)以及关键词
void
。当一个
class
被加载,或当加载器(
class loader
)的
defineClass()
被
JVM
调用,
JVM
便自动产生一个
Class object
。如果您想借由
“
修改
Java
标准库源码
”
来观察
Class object
的实际生成时机(例如在
Class
的
constructor
内添加一个
println()
),不能够!因为
Class
并没有
public constructor
(见
图
1
)。本文最后我会拨一小块篇幅顺带谈谈
Java
标准库源码的改动办法。
<o:p>
</o:p>
<o:p>
</o:p>
Class
是
Reflection
故事起源。针对任何您想探勘的
class
,唯有先为它产生一个
Class object
,接下来才能经由后者唤起为数十多个的
Reflection APIs
。这些
APIs
将在稍后的探险活动中一一亮相。
<o:p>
</o:p>
<o:p>
</o:p>
#001 public final<o:p></o:p>
#002 class
Class
<T>
implements java.io.Serializable,<o:p></o:p>
#003 java.lang.reflect.GenericDeclaration,<o:p></o:p>
#004 java.lang.reflect.Type,<o:p></o:p>
#005 java.lang.reflect.AnnotatedElement {<o:p></o:p>
#006
private
分享到:
相关推荐
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...
这篇《候捷谈Java反射机制》的文章应该深入探讨了这一主题。 反射的核心概念主要包括Class类、Constructor类、Method类和Field类。以下是对这些关键知识点的详细说明: 1. **Class类**:在Java中,每个类都有一个...
JAVA反射机制应用 JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态...
java反射机制源码java反射机制源码java反射机制源码
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...
Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...
### Java反射机制详解 #### 一、什么是Java反射机制? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...
java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);
Java反射机制笔记 Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态...
Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和扩展性,尤其是在框架开发中有着广泛的应用。 首先,我们要理解反射的...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...
通过阅读《候捷的Java精髓》,Java开发者可以深入理解语言的内在机制,提高代码质量,同时也能学习到如何解决实际开发中遇到的问题。书中的例子丰富、实用,便于读者理解和掌握。文件"art-java-b5-20050422-2ch.pdf...