• Java类加载器与Java反射


    一、Java类加载器

    当程序要使用某个类时,如果该类还没有被加载到内存中,JVM会通过加载、连接、初始化三个步骤,实现对这个类的初始化。

    • 加载

           将class文件读入JVM内存,并创建一个Class对象,任何类被使用时只有一个Class对象。

    • 连接

           验证是否有正确的内部结构,并和其他类协调一致

           准备负责为类静态成员分配内存,并设置默认初始化

           解析该类的二进制数据中的符号引用替换为直接引用

    • 初始化

         初始化相关步骤

    二、Java反射

    反射是在运行时根据指定的类获取类的信息。

    对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意方法与属性。

    要想了解一个类,必须先要获得字节码文件对象Class对象。

    2.1 通过反射获取Class

    获取Class对象的三种方式

    • 对象.getClass
    • 类名.class
    • Class.forName
    import agent.Person;
    
    /**
     * 对象.getClass
     * 类名.class
     * Class.forName
     */
    public class Reflect {
        public static void main(String[] args) throws ClassNotFoundException {
            //方式一 对象.class
            Person person = new Person();
            System.out.println("对象.class   "+ person.getClass());
            //方式二:类名.class
            System.out.println("类名.class   "+Person.class);
            //方式三:class.forName
            System.out.println("class.forName   "+Class.forName("agent.Person"));
            
        }
    
    }

    2.2 通过反射获取实现接口及父类

    import agent.Person;
    
    public class Reflect2 {
        public static void main(String[] args) {
            //获取运行时类
            Class cl = Person.class;
    
            //获取类实现的接口
            Class[]  interfaces = cl.getInterfaces();
            for (Class cls : interfaces){
                //获取类接口的名称
                System.out.println(cls.getName());
            }
            System.out.println("------------------------");
            for (Class cls : interfaces){
                //获取类接口的名称的简称
                System.out.println(cls.getSimpleName());
            }
    
            //获取父类
            Class class1 = cl.getSuperclass();
            System.out.println(class1);
        }
    }

    2.2 通过反射获取构造

     获取构造方法

    getConstructors

    getDeclaredConstructors

    创建对象

    newInstance()

    con.newInstance()

  • 相关阅读:
    人脸识别总结(附开源项目代码与各大数据集下载路径)
    simpledet 的配置
    论文笔记--PCN:Real-Time Rotation-Invariant Face Detection with Progressive Calibration Networks
    smallcorgi/Faster-RCNN_TF训练自己的数据
    保存文件名至txt文件中,不含后缀
    训练 smallcorgi/Faster-RCNN_TF 模型(附ImageNet model百度云下载地址)
    调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题
    python字符串前缀和格式化
    摩斯电码与字母相互转换
    django配置mysql
  • 原文地址:https://www.cnblogs.com/Eleven-Liu/p/15204316.html
Copyright © 2020-2023  润新知