欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

反射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

总结:看上去反射代码更加复杂,但是倘若我们并不知道字节码文件,可以通过反射技术调用方法即可,简单修改配置文件就能实现对象以及功能的改变,还可以爆破一些方法和变量(也不知道是好是坏)

反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创和控制任何类的对象,无需提前硬编码目标类,我认为还是非常符合代码设计原则的。