类加载(Class Loading)过程
概述 虚拟机把描述类的数据从Class文件加载到内存、并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 在Java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的。 每个Class文件都有可能代表着Java语言中的一个类或接口 Class文件 是一串二进制的字节流,无论以何种形式存在 类加载的时机 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的 对于初始化阶段: 虚拟机规定了有且只有5种情况必须对类进行初始化(而加载、验证、准备自然需要在此之前开始): 1,遇到new 、gestatic、putstatic或invokestatic这4个字节码指令时,如果类没有进行过初始化,则需要先出发其初始化。 如:使用new关键字进行实例化对象时、读取或设置一个类的静态属性 (被final修饰、已在编译期把结果放入常量池的静态字段除外),以及调用一个类的静态方法时。 2,使用java.lang.reflect包的方法对类进行发射调用时,如果类没有进行过初始化,则需要先出发其初始化 3,当初始化一个类时。如果其父类还没有进行过初始化,则需要先触发其父类的初始化 4,当虚拟机启动时,用户需要指定一个要执行的主类(包含main方法),虚拟机会先初始化那个主类 5,。。。 数组类本身不通过类加载器创建,它是由Java虚拟机直接创建的。 类加载