美文网首页
反射举例

反射举例

作者: UlissesJr | 来源:发表于2019-04-28 17:30 被阅读0次

    反射是框架的前提

    1.配置文件 pro.properties

    className = anli.Person
    methodName = eat
    

    2.Person类

    package anli;
    
    public class Person {
        String name;
        int age;
    
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
    
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    
        public void eat(){
            System.out.println("eat food!");
        }
        public void eat(String food){
            System.out.println("eat food!" + food);
        }
    }
    

    3.反射

    package anli;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.util.Properties;
    
    /**
     * 框架类
     */
    public class ReflectTest {
        public static void main(String[] args) throws Exception {
    
            //下面说说传统的做法  1.先创建对象-->实例化 2.调用方法
            /**
             * 下面这种方法有一个弊端,框架应该是一个半成品的软件。前提是,不能改变框架里面的任何代码,也可以创建任意类
             * 的对象,可以执行任意方法。
             */
            Person p = new Person();
            p.eat();
    
            //可以创建任意类的对象,可以执行任意方法
            //1.加载配置文件
            //1.1创建properties对象
            Properties pro = new Properties();
            //1.2加载配置文件,把他转换成一个集合
            //1.2.1获取class目录下的配置文件
            ClassLoader classLoader = ReflectTest.class.getClassLoader();
            System.out.println(classLoader);//jdk.internal.loader.ClassLoaders$AppClassLoader@512ddf17
            InputStream is = classLoader.getResourceAsStream("pro.properties");
            System.out.println(is);//java.io.BufferedInputStream@511baa65
            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);//eat food!
    
        }
    }
    

    相关文章

      网友评论

          本文标题:反射举例

          本文链接:https://www.haomeiwen.com/subject/brejnqtx.html