您的位置:首页 > 其它

反射获取构造方法并创建对象

2015-11-24 21:40 495 查看
1、什么是反射?

  反射:在运行状态下,通过class文件对象(Class的对象),去使用构造方法,成员变量,成员方法。

  首先创建一个person类:

<span style="font-size:14px;">public class Person {
private String name;
public int age;

public Person() {
}
}</span>  获取class文件对象:有三种方法如下:
    (1)Object类的getClass()方法。

<span style="font-size:14px;"> Person p = new Person();
Class c = p.getClass();
</span>    (2)数据类型的静态的class属性
<span style="font-size:14px;"> Class c3 = Person.class;</span>    (3)通过Class类的静态方法forName(String className)
<span style="font-size:14px;"> Class c4 = Class.forName("cn.itcast_01.Person");// true
</span>
  此时有c==c3==c4,因为一个类只有一个字节码文件。

  推荐使用第三种, 因为第三种方式可以结合配置文件使用。
2、反射获取构造方法

  反射获取构造器的方法共三种形式:

  (1)获取所有公共构造方法

<span style="font-size:14px;"> public Constructor<?>[] getConstructors()
</span>  (2)获取所有构造方法
<span style="font-size:14px;"> public Constructor<?>[] getDeclaredConstructors()</span>

  (3)获取某一种构造方法

<span style="font-size:14px;"> public Constructor<T> getConstructor(Class<?>... parameterTypes)</span>
  括号中表示要传递Class类型的可变参数(可变参数请查看我的博客《可变参数》),如果获取无参构造,则不传递可变参数。如下:

 Constructor con = c.getConstructor();// 表示我使用的是无参数构造方法

3、反射获取构造函数并创建对象

  思路:反射获取构造器,首先要获取待创建对象的类的class文件,通过class文件获取构造器,得到构造方法,通过构造方法创建对象。

  代码实现:

<span style="font-size:14px;">public class ReflectDemo2 {
public static void main(String[] args) throws Exception {

// 获取字节码文件对象
Class c = Class.forName("cn.itcast_01.Person");

// 获取构造器对象,此处获取的为带两个参数的构造方法
Constructor con = c.getConstructor(String.class, int.class);

// 创建对象,创建对象方法为 newInstance()
Object obj = con.newInstance("岳飞", 39);
System.out.println(obj);
}
}
</span>  小结:反射之所以为反射,是因为一改以前的“对象.方法(或属性)”,变成了“方法对象(或属性对象).方法”来创建对象或为属性赋值,下一篇博客将阐述如何利用反射获取字段以及方法。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: