反射-通過反射獲取無參構造方法並使用

ZHOU_VIP發表於2017-06-11

package cn.itcast_02;

import java.lang.reflect.Constructor;

import cn.itcast_01.Person;

/*
 * 通過反射獲取構造方法並使用。
 */
public class ReflectDemo {
	public static void main(String[] args) throws Exception {
		// 獲取位元組碼檔案物件
		Class c = Class.forName("cn.itcast_01.Person");//反射是不會讓你看到任何類的資訊的,cn.itcast_01.Person將來會做成配置檔案,不是寫死的,配置誰就執行誰

		// 獲取構造方法
		// public Constructor[] getConstructors():所有公共構造方法(有public修飾的構造方法)
		// public Constructor[] getDeclaredConstructors():所有構造方法
		
		Constructor[] cons = c.getDeclaredConstructors();
		for (Constructor con : cons) {
			System.out.println(con);
		}

		// 獲取單個構造方法
		// public Constructor<T> getConstructor(Class<?>... parameterTypes)
		// 參數列示的是:你要獲取的構造方法的構造引數個數及資料型別的class位元組碼檔案物件
		Constructor con = c.getConstructor();// 返回的是構造方法物件
		
		// public T newInstance(Object... initargs)
	    // 使用此 Constructor 物件表示的構造方法來建立該構造方法的宣告類的新例項,並用指定的初始化引數初始化該例項。
		Object obj = con.newInstance();//相當於Person p = new Person(); System.out.println(p);
		System.out.println(obj);

		Person p = (Person)obj;
		p.show();
	}
}


相關文章