zoukankan      html  css  js  c++  java
  • 反射从入门到精通(一)

    1. 三个类加载器

    • BootStrap类加载器【boot】
      • 用于加载 jre:lib下的jar包【.class文件】
      • Java提供的大多数类都在此
    • Exetension类加载器【ext】
      • 主要用于加载ext文件夹下的jar包【D:Program FilesJavajdk1.8.0_144jrelibext】
      • 继承于BootStrap
    • Application类加载器 【app】
      • 程序中应用的jar包
      • mysql,fastjson.....

    2.如果要加载一个类:java.lang.String

    String.java --> String.class -->加载 -->类加载器 -->【app】 -->【ext】 -->【boot】 -->【检查--ct.jar中存在String类】-->  拒接加载 -->【ext】 -->【app】 -->放弃

    3.为什么加载流程这么复杂 【为了安全】

    4. Car car = new Car();

    • 初始化static
    • 初始化属性
    • 构造方法
    • 创建了一个特殊的对象Class

    5.Class对象

    • 类加载过程中创建
    • 每一个类有唯一的一个Class对象
    • 类型为:Class类型
    • 记录同一类的所有相关的对象的基本信息【属性、方法】

    6.流程图:

    7.获取Class对象的两种方式

    package com.xuzhiwen.reflect;
    
    public class Test {
        public static void main(String[] args) throws Exception {
            Test test = new Test();
            Class clazz_a = test.getClass(); //方法一
            Class clazz_b = Test.class;     //方法二
        }
    }

    8. 获取三个类加载器

    package com.xuzhiwen.reflect;
    
    public class Test {
        public static void main(String[] args) throws Exception {
            Test test = new Test();
            Class clazz_a = test.getClass(); //方法一
            Class clazz_b = Test.class;     //方法二
    
            System.out.println(test.getClass().getClassLoader());
            System.out.println(test.getClass().getClassLoader().getParent());
            System.out.println(test.getClass().getClassLoader().getParent().getParent());
        }
    }

    输出结果如下:

    BootStrap加载器输出结果为null,是因为它是C语言写的。

  • 相关阅读:
    Navicat Premium_11.2.7简体中文版 破解版本 windows版本 失效
    php多维数组排序 3
    php 多维数组排序
    php对二维数组排序
    mysql子查询批量找id最大的
    教你如何选择相机的曝光模式(转)
    3分钟搞懂曝光直方图(转)
    摄影新手最想知道的10件事(转)
    教你搞懂光圈大小的成像差异(转)
    新手必须掌握的20个摄影构图法 转
  • 原文地址:https://www.cnblogs.com/beibidewomen/p/7625730.html
Copyright © 2011-2022 走看看