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();
}
}
java反射机制——获取字节码对应类的对象
猜你喜欢
转载自blog.csdn.net/TDOA1024/article/details/82919449
今日推荐
周排行