反射Demo
程序员文章站
2022-04-14 16:10:04
使用反射之前的代码 public class P1 { public void eat(){ System.out.println("p1的方法"); } } public class P2 { public void sleep(){ System.out.println("p2的方法"); } ......
使用反射之前的代码
public class p1 { public void eat(){ system.out.println("p1的方法"); } } public class p2 { public void sleep(){ system.out.println("p2的方法"); } } public class reflect1 { public static void main(string[] args) throws exception { //可以创建任意类的对象,不能改变任何代码 /* p1 p = new p1(); p.eat(); p2 stu = new p2(); stu.sleep();*/ }
使用反射之后的代码
public class reflect1 { public static void main(string[] args) throws exception { //可以创建任意类的对象,不能改变任何代码 /* p1 p = new p1(); p.eat(); p2 stu = new p2(); stu.sleep();*/ //加载配置文件 properties properties = new properties(); classloader loader = reflect1.class.getclassloader(); inputstream is = loader.getresourceasstream("pro.properties"); properties.load(is); //获取配置文件加载的数据 string classname = properties.getproperty("classname"); string methodname = properties.getproperty("methodname"); //加载类进内存 class<?> cla = class.forname(classname); //创建对象 object o = cla.newinstance(); //获取方法对象 method method = cla.getmethod(methodname); //执行方法 method.invoke(o); } } #只是一个配置文件pro.properties classname=domain.p1 methodname=eat
总结:看上去反射代码更加复杂,但是倘若我们并不知道字节码文件,可以通过反射技术调用方法即可,简单修改配置文件就能实现对象以及功能的改变,还可以爆破一些方法和变量(也不知道是好是坏)
反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创和控制任何类的对象,无需提前硬编码目标类,我认为还是非常符合代码设计原则的。
上一篇: 初始WebApi(2)
下一篇: VS工具箱不显示DEV控件解决方法