ClassLoader是用来动态的加载class文件到虚拟机中,并转换成java.lang.class类的一个实例,每一个这样的实例用来表示一个java类,咱们能够根据Class的实例获得该类的信息,并经过实例的newInstance()方法建立出该类的一个对象,除此以外,ClassLoader还负责加载Java应用所需的资源,如图像文件和配置文件等。java
ClassLoader类是一个抽象类。若是给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。通常策略是将名称转换为某个文件名,而后从文件系统读取该名称的“类文件”。ClassLoader类使用委托模型来搜索类和资源。每一个 ClassLoader实例都有一个相关的父类加载器。须要查找类或资源时,ClassLoader实例会在试图亲自查找类或资源以前,将搜索类或资源的任务委托给其父类加载器。 数据结构
注意:程序在启动的时候,并不会一次性加载程序所要用的全部class文件,而是根据程序的须要,经过Java的类加载机制来动态加载某个class文件到内存中。函数
其体系结构图以下 this
若是要实现本身的类加载器,无论是实现抽象列ClassLoader,仍是继承URLClassLoader类,它的父加载器都是AppClassLoader,由于无论调用哪一个父类加载器,建立的对象都必须最终调用getSystemClassLoader()做为父加载器,getSystemClassLoader()方法获取到的正是AppClassLoader。spa
注意:Bootstrap classLoader并不属于JVM的等级层次,它不遵照ClassLoader的加载规则,Bootstrap classLoader并无子类。.net
类的初始化是指:为类中各个类成员(被static修饰的成员变量)赋初始值的过程,是类生命周期中的一个阶段。3d
参考:code
https://blog.csdn.net/u014634338/article/details/81434327 对象