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方法的时序图