2)考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。
import java.lang.reflect.*
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName(args[0])
Method m[] = c.getDeclaredMethods()
for (int i = 0i <m.lengthi++)
System.out.println(m[i].toString())
} catch (Throwable e) {
System.err.println(e)
}
}
}
按如下语句执行:
java DumpMethods java.util.Stack
它的结果输出为:
public java.lang.Object java.util.Stack.push(java.lang.Object)
public synchronized java.lang.Object java.util.Stack.pop()
public synchronized java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized int java.util.Stack.search(java.lang.Object)
3)反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。
JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。
扩展资料:
JAVA中反射实例:
1、Class superClass=clazz.getSuperclass()//获取父类。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces()//获取实现接口。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors()//构造方法。
System.out.println("getConstructors:"+cons.length)。
参考资料来源:百度百科: JAVA反射机制