摘要:
˃c1=Class.forName;//创建对象Objectobj=c1.newInstance();//获取方法对象Methodc1Method=c1.getMethod;//调用方法执行c1Method.invoke;}}
反射的好处:通过读取配置文件拿到类的全路径和方法,可以不改变代码的前提下,创建任意对象,调用任意方法。
测试student类如图:
配置文件如图:
运行如图:
测试代码如下:
packagecom.java.day31UseReflect; importjava.io.IOException; importjava.io.InputStream; importjava.lang.reflect.InvocationTargetException; importjava.lang.reflect.Method; importjava.util.Properties; //不改变任意代码前提下,创建任意对象,并执行任意方法 //步骤 配置文件和反射 public classUseReflect { public static void main(String[] args) throwsIOException, ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { //加载配置文件 Properties pro = newProperties(); ClassLoader classLoader = UseReflect.class.getClassLoader(); //找到文件路径,加载文件 InputStream stream = classLoader.getResourceAsStream("conf.properties"); pro.load(stream); //读取配置文件,拿到类路径和方法 String className = pro.getProperty("className"); String methodName = pro.getProperty("methodName"); //拿到字节码,加载进内存 Class<?> c1 =Class.forName(className); //创建对象 Object obj =c1.newInstance(); //获取方法对象 Method c1Method =c1.getMethod(methodName); //调用方法执行 c1Method.invoke(obj); } }