Java--反射--反射机制快速入门

  1. 反射的目录:
  2. 反射的需求引出反射:

  3.  

    package com.model.fanshe;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Properties;
    
    /**
     * @Description:测试类
     * @Author: 张紫韩
     * @Crete 2021/6/26 21:25
     */
    public class FanSheDemo01 {
        public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
    //        传统的方式我们调用类的Cat的hi方法
            Cat cat = new Cat();
            cat.hi();
    
    //        非传统的方式实现类中方法的调用
    //        1.利用文件流的形式(Properties的使用),我们尝试使用,明白反射
            String filePath="D:\\qq\\IDEA\\IdeaProjects\\java_mianshi_test\\mianshi_fanshehezhujie\\src\\main\\resources\\re.properties";
            Properties properties = new Properties();
            properties.load(new FileReader(filePath));
            String classFullPath = properties.getProperty("classFullPath");
            String method = properties.getProperty("method");
    
    //        2.拿到配置文件中的类的信息,创建对象
    //        传统的方式我们无法创建对象 --》只有使用我们的反射机制才能创建对象
    //        new classFullPath(); 错误的我们不能使用字符串代替类,进行创建对象
    //        3.反射机制的使用,快速入门
    //          3.1加载类,返回Class类型的对象aClass
            Class<?> aClass = Class.forName(classFullPath);
    //          3.2 通过 aClass 对象的到加载类 com.model.fanshe.Cat 类的实例对象
            Object o = aClass.newInstance();
    //          3.3通过 aClass 的到方法的实例对象:
    //                即:在反射中,方法也被当做是对象来创建,
            Method method1 = aClass.getMethod(method);
    //        4.通过method对象调用某个 com.model.fanshe.Cat 类实例对象的方法
            method1.invoke(o);  //在传统的方法中。我们使用 实例对象.方法名() , 但是在方法中我们使用的是  方法对象.invoke(类的实例对象)
    
            /**
             * 1.通过向类加载器中传入一个,某个类的路径信息,的到类加载器的一个实例
             * 2.通过类加载器的实例,我们可以的到 这个类的实例对象和类中的方法对对象
             * 3.再通过 实例对象和方法对象 调用类中的方法
             *
             * 且我们可以在不修改源码的同时,只修改配置文件就可以实现对 不同类中不同方法进行调用
             * */
        }
    }

     

     

     

     

     

     

       

     
posted @ 2021-06-27 22:09  张紫韩  阅读(44)  评论(0编辑  收藏  举报