反射-通過反射獲取私有構造方法並使用

ZHOU_VIP發表於2017-06-11

package cn.itcast_02;

import java.lang.reflect.Constructor;

/*
 * 需求:通過反射獲取私有構造方法並使用
 * private Person(String name){}
 * 
 * Person p = new Person("風清揚");
 * System.out.println(p);
 */
public class ReflectDemo3 {
	public static void main(String[] args) throws Exception {
		// 獲取位元組碼檔案物件
		Class c = Class.forName("cn.itcast_01.Person");

		// 獲取私有構造方法物件
		// Constructor con = c.getConstructor(String.class);// NoSuchMethodException:每個這個方法異常
		// 原因是一開始我們使用的方法getConstructor只能獲取public公共的,下面這種方式getDeclaredConstructor就可以了。
		Constructor con = c.getDeclaredConstructor(String.class);

		// 用該私有構造方法建立物件
		// IllegalAccessException:非法的訪問異常。
		// 暴力訪問
		con.setAccessible(true);// 值為true則指示反射的物件在使用時應該取消Java語言訪問檢查。
		Object obj = con.newInstance("風清揚");

		System.out.println(obj);
	}
}


相關文章