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
        }
    }
  • 相关阅读:
    Linux面试题大全
    数据库学习002
    数据学习001
    003
    002
    001
    金蝶清空日志数据库脚本
    表格批量导入金蝶专业版销售订单
    金蝶单据清空记账标志
    金蝶单据字段审核后可修改
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/13839224.html
Copyright © 2011-2022 走看看