JAVA类的加载——加载方式和加载的时机

定义

虚拟机把.class文件的二进制数据加载到内存中,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Class类型。二进制数据放在运行时的方法区中,并在堆中创建一个java.lang.Class对象,用来封装其在方法区中的数据结构,并向程序员提供访问方法区中数据结构的接口

类的加载方式

  1. 直接加载:本地编译好的.class文件
  2. 网络加载:java.net.URLClassLoader可以加载url指定的类
  3. 从zip,jar等归档文件中加载.class文件
  4. 从java源代码文件动态编译成为.class文件

类加载的时机

类加载的生命周期:加载(Loading)-->验证(Verification)-->准备(Preparation)-->解析(Resolution)-->初始化(Initialization)-->使用(Using)-->卸载(Unloading)

  1. 加载阶段:虚拟机自行决定。
  2. 初始化阶段:
  3. 遇到new、getstatic、putstatic、invokestatic这4个字节码指令时,如果类没有进行过初始化,触发初始化操作。
  4. 使用java.lang.reflect包的方法对类进行反射调用时。
  5. 当初始化一个类的时候,如果发现其父类还没有执行初始化则进行初始化。
  6. 虚拟机启动时用户需要指定一个需要执行的主类,虚拟机首先初始化这个主类。

提醒:接口与类的初始化规则在第三点不同,接口不要求所有的父接口都进行初始化。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();