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();
		
		
		
	}

}

猜你喜欢

转载自blog.csdn.net/TDOA1024/article/details/82919449