JAVA Reflection(反射机制)
作者:网络转载 发布时间:[ 2014/7/4 13:44:17 ] 推荐标签:软件开发 java
Java.lang.reflect.Constructor
Class[] getParameterTypes()
返回一个用于描述参数类型的Class对象数组
getReturnType()
返回一个用于描述返回类型的Class对象
int getModifiers()
返回一个用于描述方法抛出的异常类型的Class对象数组
Class getDeclaringClass()
返回一个用于描述类中定义的构造器、方法或域的Class对象
通过反射实例化参数
平常实例化对象通常使用new关键字。但是使用new关键字实例化的对象具有强耦合性。New对象无法胜任未知对象的实例化,这时候只能通过反射动态生成。例如Spring的DI。
实例化无参构造函数的对象
Class.newInstance()
Class.getConstructor(new Class[]{}).newInstance(new Object[]{})
实例化带参构造函数的对象
Clazz.getConstructor(Class<?> ...ParameterType).newInstance(Object ...initargs)
反射机制举例
|
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) throws Exception{
//加载并初始化命令行参数指定的类
Class classType = Class.forName(args[0]);
//获得类的所有方法
Method methods[] = classType.getDeclaredMethods();
for(int i = 0; i < methods.length; i++)
System.out.println(methods[i].toString());
}
}
|
|
输入:java DumpMethods java.util.Stack
public synchronized java.lang.Object java.util.Stack.pop()
public java.lang.Object java.util.Stack.push(java.lang.Object)
public boolean java.util.Stack.empty()
public synchronized java.lang.Object java.util.Stack.peek()
public synchronized int java.util.Stack.search(java.lang.Object)
|
运用反射机制调用方法
getMethod和invoke方法的时序图


sales@spasvo.com