获取字节码对象
- 首先获取类的字节码对象,有三种方式,这里记录最常用的一种;
Class aClass = Class.forName("com.lijugang.www.test02.Product");//获得类的字节码文件
实例化,调用构造方法
newInstance()
Object o = aClass.newInstance();//对象实例化
getDeclaredConstructor()
获得Constructor
对象,使用Constructor
对象的newInstance()
方法。
Constructor declaredConstructor = aClass.getDeclaredConstructor(int.class, String.class);
Object test01 = declaredConstructor.newInstance(10, "test01");
getDeclaredConstructor()
调用无参,不传参数即可。
Constructor declaredConstructor = aClass.getDeclaredConstructor();
Object test01 = declaredConstructor.newInstance();
设置属性值
三要素:对象,属性名,值。
Field declaredField = aClass.getDeclaredField("name");
declaredField.set(o,"jack");//对象和参数
System.out.println(declaredField.get(o));//获取属性的值
调用方法
如何调用方法:
- 对象
使用class.forName()
- 获取方法名
使用Method
类中的getDeclaredMethod
方法 - 实参
- 返回值
Method m = aClass.getMethod("m", String[].class);//方法名和参数类型
Object relvalue = m.invoke(o,(Object) new String[]{"a","b","c"});
System.out.println(relvalue);
aClass
是字节码对象,m
是Method
对象,invoke
是反射调用方法的核心,relvalue
是返回值。