37、java.lang.reflect.Constructor<T>类

一、Constructor<T>

 

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

二、方法

 

public final class Constructor<T>extends 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<String> constructor = (Constructor<String>)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<String> con = (Constructor<String>) 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+">");
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值