zoukankan      html  css  js  c++  java
  • 反射Demo

    使用反射之前的代码

    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

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

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

  • 相关阅读:
    HDU2502 月之数 组合数
    HDU1128 Self Numbers 筛选
    HDU2161 Primes
    HDU1224 Free DIY Tour 最长上升子序列
    HDU2816 I Love You Too
    winForm窗体设置不能随意拖动大小
    gridview 中SelectedIndexChanged 事件获得该行主键
    关于bin和obj文件夹。debug 和release的区别
    winform最小化时在任务栏里隐藏,且显示在托盘里
    wcf异常处理
  • 原文地址:https://www.cnblogs.com/shun998/p/12579451.html
Copyright © 2011-2022 走看看