饥人谷技术博客技术干货Java学习笔记

类加载概述

2017-03-24  本文已影响55人  Hughman

(1)类的加载方式:

方式一:命令行启动应用时,由JVM初始化加载
方式二:通过Class.forName()方法动态加载(默认会执行初始化块,但如果指定ClassLoader,初始化时不执行静态块)
方式三:通过ClassLoader.loadClass()方法动态加载(不会执行初始化块)

(2)类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成能被虚拟机直接使用的Java类型。

(3)类加载时机

Paste_Image.png

注意:

1.顺序问题:

加载、验证、准备、初始化和卸载的顺序是确定的,解析阶段不一定,在某些情况下可以初始化后开始,从而支持Java语言的运行时绑定(动态绑定或者晚期绑定)

2.初始化阶段有且仅有5种情况(主动引用):

反例:被动引用不会触发初始化:

3.接口的加载过程:

与类加载过程稍有不同,接口中不能使用static{}语句块,但编译器仍然会为接口生成“<clinit>()”类构造器,用于初始化接口中成员变量。
真正的区别是:初始化一个类时,接口不要求其父接口全部完成初始化,只有真正使用父接口的时候才会初始化。
类从被加载到虚拟机内存中开始,到卸载出内存为止,类的生命周期:加载——验证——准备——解析——初始化——使用——卸载。7个阶段。
连接:是验证——准备——解析三个部分

(4)类加载的过程

1.加载2.验证3.准备4.解析5.初始化

(5)三大类加载器:

启动类加载器——扩展类加载器——应用程序类加载器

上一篇下一篇

猜你喜欢

热点阅读