1. 程式人生 > >java反射機制——獲取位元組碼對應類的物件

java反射機制——獲取位元組碼對應類的物件

package cn.itcast.reflect.demo;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import cn.itcast.bean.demo.Person;

public class ReflectDemo2 {

	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, Exception, Exception, IllegalArgumentException, InvocationTargetException {
		
//		獲取person物件的方法
//		creatNewObject_1();
		creatNewObject_2();
		
	}

	public static void creatNewObject_2() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//		早期:
//		Person person=new Person("三胖",5);
		
//		如今:
//		當獲取指定名稱對應類中的所體現的物件時,
//		而該物件初始化不使用空引數建構函式怎麼辦?
//		既然是通過指定的建構函式進行物件的初始化,
//		所以應該先獲取到該建構函式,通過位元組碼檔案物件即可完成
//		該方法是:getConstructor(paramterType);
		
		String classname="cn.itcast.bean.demo.Person";	
//		尋找該名稱類檔案,並載入進記憶體,併產生Class物件
		Class class1=Class.forName(classname);
//		獲取指定構造器的物件
		Constructor constructor=class1.getConstructor(String.class,int.class);
//		通過該構造器物件的newInstance方法進行物件初始化
		Object object=constructor.newInstance("三胖",5);
		
		
	}

	public static void creatNewObject_1() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//		早期:new的時候,先根據被new的類的名稱尋找該類的位元組碼檔案,並載入進記憶體
//		並建立該位元組碼檔案的物件,並接著建立該位元組碼檔案的對應的Person物件。		
		Person person=new Person();
		
//		現在:
		String classname="cn.itcast.bean.demo.Person";	
//		尋找該名稱類檔案,並載入進記憶體,併產生Class物件
		Class class1=Class.forName(classname);
//		產生該類的物件	
		Object ob1=class1.newInstance();
		
		
		
	}

}