一、通过反射执行构造方法
// 1、反射执行构造函数(无参数)
Object obj = myObjectClass.newInstance();
System.out.println("obj = " + obj);
// 2、反射执行构造函数(有参数)
Class myObjectClass1 = Class.forName("com.demo.reflection.MyObject");
Class[] pType1 = new Class[]{Class.forName("java.lang.String"), int.class};
Constructor ctor1 = myObjectClass1.getConstructor(pType1);
Object[] paramValue1 = new Object[]{"lixm",18};
Object result1 = ctor1.newInstance(paramValue1);
二、通过反射调用方法
// 1、反射执行构造函数
// 执行有参数的构造方法
Class[] pType = new Class[]{myObjectClass1};
Constructor ctor = myObjectClass.getConstructor(pType);
Object[] paramValue = new Object[]{result1};
Object result = ctor.newInstance(paramValue);
// 获取本类所有方法的名称(不包括父类的,获取包含父类的方法用:getMethods())
Method[] declaredMethods = myObjectClass.getDeclaredMethods();
for(Method declaredMethod : declaredMethods){
System.out.println("declaredMethod = " + declaredMethod.getName());
if(declaredMethod.getName().equals("getMyObject")){
MyObject myObj = (MyObject)declaredMethod.invoke(result, null);
myObj.showMsg();
}
}
三、用于测试的类
package com.demo.reflection;
public class MyObject {
private String name;
private int age;
public MyObject(){
System.out.println("MyObject()...");
}
public MyObject(String name,int age){
System.out.println("MyObject() , name = " + name + ", age = " + age);
this.name = name;
this.age = age;
}
public void showMsg(){
System.out.println("showMsg(), name = " + name + ", age = " + age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.demo.reflection;
public class ObjectTest {
private MyObject myObject;
public ObjectTest(){
}
public ObjectTest(MyObject myObject){
this.myObject = myObject;
}
public MyObject getMyObject() {
return myObject;
}
public void setMyObject(MyObject myObject) {
this.myObject = myObject;
}
}