第一种方式:Class.forName()
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import javax.activation.FileDataSource;
import wge.test.Father;
public class Test {
public static void main(String[] args) throws Exception {
String className = "wge.test.Father";
Class<?> clazz = Class.forName(className);
Father father = (Father) clazz.newInstance();
//获取方法
Method method = clazz.getDeclaredMethod("eat");
//调用方法
method.invoke(father, null);
//获取属性字段
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
System.out.println(f.getName());
}
}
}
第二种:Properties方式
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.reflect.Method;
import wge.user.User;
public class ReflectTest {
//用反射来创建对象
public static void main(String[] args) throws Exception {
//1.加载文件
BufferedReader bufferedReader = new BufferedReader(new FileReader("user.properties"));
//2.读取文件的内容
String className = bufferedReader.readLine();
//System.out.println(className);
//3.加载类
Class clazz = Class.forName(className);
//4.创建对象
User user = (User)clazz.newInstance();
//5.获取方法
Method method = clazz.getDeclaredMethod("play", null);
method.invoke(user, null);
user.eat();
}
}