37、java.lang.reflect.Constructor

阅读更多

一、Constructor

 

  1. Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。 
  2. Constructor 允许在将实参与带有底层构造方法的形参的 newInstance() 匹配时进行扩展转换,
  3. 但是如果发生收缩转换,则抛出 IllegalArgumentException。

二、方法

 

public final class Constructorextends AccessibleObject implements GenericDeclaration, Member
{
	//没有构造方法

	//以字符串形式返回此构造方法的名称。它总是与构造方法的声明类的简单名称相同
	public String getName(){}

	//使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
	public T newInstance(Object... initargs)
              throws InstantiationException,
                     IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException{}

	//返回描述此 Constructor 的字符串,其中包括类型参数
	public String toGenericString(){}

	//返回描述此 Constructor 的字符串
	public String toString(){}
}

 

三、应用

 

得到某个类所有的构造方法

  • 例子:Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();

得到某一个构造方法

  • 例子:Constructor constructor = (Constructor)Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);

创建实例对象

  • 通常方式:String str = new String(new StringBuffer(“abc”));
  • 反射方式:String str = constructor.newInstance(new StringBuffer(“abc”));

Class.newInstance()方法:

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

四、示例

 

 

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ReflectDemo {
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException
	{
		Constructor con = (Constructor) Class.forName("java.lang.String").getConstructor(StringBuffer.class);
		String str = con.newInstance(new StringBuffer("abc"));
		System.out.println(str);
		String obj = (String) Class.forName("java.lang.String").newInstance();
		System.out.println("<"+obj+">");
	}
}

 

你可能感兴趣的:(Constructor)