反射中的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();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

注:该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象

二、代码示例

    1、ReflectPoint.java

package staticimport.reflect;

public class ReflectPoint {
	private int x;
	public int y;
	
	private ReflectPoint(){}
	
	public ReflectPoint(int x, int y) {
		this.x = x;
		this.y = y;
	}

	@Override
	public String toString() {
		return "ReflectPoint [x=" + x + ", y=" + y + "]";
	}
	
}

    2、ReflectConstructorTest.java

package staticimport.reflect;

import java.lang.reflect.Constructor;

public class ReflectConstructorTest {

	public static void main(String[] args) throws Exception {
		Constructor constructor = String.class.getConstructor(StringBuffer.class);
		String str = (String) constructor.newInstance(/*"abc"*/new StringBuffer("abc"));
		System.out.println(str.charAt(2));
		
		//测试私有构造器访问,结果和私有字段访问一致
		Constructor constructor2 = ReflectPoint.class.getDeclaredConstructor();
		constructor2.setAccessible(true);
		ReflectPoint reflectPoint = (ReflectPoint) constructor2.newInstance();
		System.out.println(reflectPoint);
	}

}

 

转载于:https://my.oschina.net/Howard2016/blog/1613772

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值