[Java] 纯文本查看 复制代码
//1.获取Person的Class对象
Class personClass = Person.class;
//2.获取方法
Method eat_method = personClass.getMethod("eat", String.class); //3.执行方法
Person p = new Person();
eat_method(p,"饭");
[Java] 纯文本查看 复制代码
public class ReflectTest {
public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//1.加载文件
//1.1创建Properties对象
Properties pro = new Properties();
//1.2加载配置文件,转换为一个集合
//1.2.1获取class目录下的配置文件
//1.2.1.1获取本类的一个类加载器
ClassLoader classLoader = ReflectTest.class.getClassLoader();
//1.2.1.2使用类加载器去找到pro.properties文件的路径,并转换为流
InputStream is = classLoader.getResourceAsStream("pro.properties");
//1.2.2获取文件中的内容
pro.load(is);
//2.获取配置文件中定义的数据
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//3.加载该类进内存
Class cls = Class.forName(className);
//4.创建对象
Object obj = cls.newInstance();
//5.获取方法对象
Method method = cls.getMethod(methodName);
//6.执行方法
method.invoke(obj);
}
}
[Java] 纯文本查看 复制代码
public class ReflectTest {
public static void main(String[] args) throws IOException {
//1获取本类的class对象
Class cls = ReflectTest.class;
//2获取注解
Pro ann = cls.getAnnotation(Pro.class);
//3.调用注解对象定义的抽象方法,获取属性值
//其实就是在内存中生成了一个该注解的子类实现对象
String className = an.className();
String methodName = an.methodName();
//4.调用注解的方法
Method meth = cls.getMethod(methodName);
meth.invoke(p);
}
}