反射之Constructor类

一、反射

1、反射就是把Java类中的各种成分映射成相应的Java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量、方法、构造方法、包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示Java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Constructor、Package等等。

2、一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象后有什么用呢?怎么用呢?这正是学习和应用反射的要点。

二、Constructor类

1、Constructor类代表某个类中的一个构造方法
2、得到某个类所有的构造方法:

例子:

Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();
3、得到某一个构造方法

例子:

Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
4、创建实例对象

通常方式:

String str = new String(new StringBuffer(“abc”));

反射方式:

String str = (String)constructor.newInstance(new StringBuffer(“abc”));
5、Class.newInstance()方法

例子:

String obj = (String)Class.forName(“java.lang.String”).newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象;
该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

6、示例代码

package cn.sunft.day01.reflect;

import java.lang.reflect.Constructor;

public class ConstructorTest {

	public static void main(String[] args) throws Exception {
		//new String(new StringBuffer("abc"))
		//获取指定参数的构造器
		Constructor constructor1 = 
				String.class.getConstructor(StringBuffer.class);
		//构造的时候,需要传入一个StringBuffer的实例
		String str1 = (String) 
				constructor1.newInstance(new StringBuffer("abc"));
		System.out.println(str1.charAt(2));//c
	}

}


你可能感兴趣的:(反射,Constructor,反射,Java)