Java编程--反射(Ⅲ 调用构造方法)

Java编程--反射(Ⅲ 调用构造方法)

一. 利用反射调用构造方法:

【范例】观察当前程序的问题。

public class Book {
	private String title;
	private double price;

	public Book(String title, double price) {
		this.title = title;
		this.price = price;
	}

	@Override
	public String toString() {
		return "Title : " + this.title + ", price : " + this.price;
	}
}

public class Test1 {
	public static void main(String[] args) throws Exception {
		Class<?> cls = Class.forName("com.it.test2.Book");
		Object obj = cls.newInstance(); // 相当于使用new调用无参构造实例化
		System.out.println(obj);
	}
}

运行结果:


  以上出现的错误指的就是当前Book类没有无参构造方法,所以程序无法进行对象的实例化。在这种情况下,只能明确调用有参构造方法。

二. Class类里面提供了方法可以取得构造:

public Constructor<?>[] getConstructors()

                                 throws SecurityException

返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。

返回: 

表示此类公共构造方法的 Constructor 对象数组


public Constructor<T> getConstructor(Class<?>... parameterTypes)

                              throws NoSuchMethodException,

                                     SecurityException

返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。

参数: 

parameterTypes - 参数数组

返回: 

与指定的 parameterTypes 相匹配的公共构造方法的 Constructor 对象

      以上两个方法返回的都是”java.lang.reflect.Constructor”类的对象。在这个类中提供有一个明确传递有参构造内容的实例化对象方法。

public T newInstance(Object... initargs)

使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。个别参数会自动解包,以匹配基本形参,必要时,基本参数和引用参数都要进行方法调用转换。

 【范例】调用类中的有参构造。

import java.lang.reflect.Constructor;

public class Test1 {
	public static void main(String[] args) throws Exception {
		Class<?> cls = Class.forName("com.it.test2.Book");
		Constructor<?> con = cls.getConstructor(String.class,double.class);
		Object obj = con.newInstance("Java开发",68.80);
		System.out.println(obj);
	}
}

运行结果:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值