## 获取公共的构造方法数组
~~~
Class user = Class.forName("User");
//获取所有公共权限(public)的构造方法
Constructor[] constructors = user.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
~~~
## 获取空参构造方法并运行
~~~
Class user = Class.forName("User");
//获取指定的构造方法
Constructor constructor = user.getConstructor();
//运行空参构造方法
Object o = constructor.newInstance();
//获取User的实例
User u = (User) o;
u.show();
~~~
## 获取有参构造方法并运行
~~~
Class c = Class.forName("User");
//传递要获取的公共(public)构造方法的参数列表,这里的参数类型如果只写String,那么只是字符串.这里要传入类型的class文件对象.所以这里要传入String.class
Constructor constructor = c.getConstructor(String.class);
//运行构造方法,传递实际的参数
User u = (User) constructor.newInstance("jack");
System.out.println(u.getName());
~~~
## 反射获取构造方法并运行的快速方式
有个前提是被反射的类必须具有空参数构造方法.这个构造方法的权限必须是public.
~~~
Class c = Class.forName("User");
//直接创建被反射类的对象实例
Object o = c.newInstance();
System.out.println(o);
~~~
## 获取私有构造方法并运行
不推荐,因为破坏了程序的封装性和安全性.
~~~
Class c = Class.forName("User");
//getDeclaredConstructors获取所有构造方法,包括私有的
//Constructor[] declaredConstructors = c.getDeclaredConstructors();
Constructor declaredConstructor = c.getDeclaredConstructor(String.class);
//Constructor父类方法设置是否可访问,否则会报错.此方法在运行时关闭了java的访问检查(暴力反射)
declaredConstructor.setAccessible(true);
Object o = declaredConstructor.newInstance("jack");
System.out.println(o);
~~~