zoukankan      html  css  js  c++  java
  • 反射练习

    直接上代码记录下:

    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Properties;
    
    /*
    * Bootstrap class loader:它是虚拟机的内置类加载器,通常表示为null ,并且没有父null
    Platform class loader:平台类加载器可以看到所有平台类 ,平台类包括由平台类加载器或其祖先定义的Java
    SE平台API,其实现类和JDK特定的运行时类
    System class loader:它也被称为应用程序类加载器 ,与平台类加载器不同。 系统类加载器通常用于定义应
    用程序类路径,模块路径和JDK特定工具上的类
    类加载器的继承关系:System的父加载器为Platform,而Platform的父加载器为Bootstrap
    * */
    public class ReflectDemo {
        public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
    
    
            loadClass();
        }
    
        private static void test1()throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
            //配置文件获取需要加载的类和方法
            Properties pro=new Properties();
            FileReader  fr=new FileReader("Idea-test\Config.txt");
            pro.load(fr);
            String clsName=pro.getProperty("className");
            String methodName=pro.getProperty("methodName");
    
            //1.加载类
            Class<?> cls = Class.forName(clsName);
            //2.获取类的构造函数
            Constructor<?> constructor = cls.getConstructor();
            //3.通过构造函数创建类的实例
            Object o = constructor.newInstance();
            //4.获取类发方法
            Method declaredMethod = cls.getDeclaredMethod(methodName);
            //5.实例调用方法
            declaredMethod.invoke(o);
        }
    
        /*
        * 加载类3中方式
        * 1.Class的静态方法:Class.forName("com.reflect.Person")
        * 2.类实例的方法:p.getClass()
        * 3.类的class属性:Person.class
        *
        * 通过比较,3种方式获得的类内存地址都是同一个。
        * 在内存中只有一份类内存地址
        * */
        public static void loadClass() throws ClassNotFoundException {
            Class<?> aClass = Class.forName("com.reflect.Person");
            System.out.println(aClass);
    
            Person p=new Person();
            Class<? extends Person> aClass1 = p.getClass();
            System.out.println(aClass1);
    
            Class<Person> personClass = Person.class;
            System.out.println(personClass);
    
            System.out.println(aClass==aClass1);//true
            System.out.println(aClass==personClass);//true
        }
    }
  • 相关阅读:
    组合数学总结
    字符串算法总结
    数据结构总结
    CDQ分治(学习笔记)
    网络流(学习笔记)
    string
    water
    mine
    洛谷 P4035 【球形空间产生器】
    洛谷 P3306 【随机数生成器】
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/13839224.html
Copyright © 2011-2022 走看看