类的加载过程
2019-12-05 16:00:57来源:博客园 阅读 ()
类的加载过程
Posted on 2019-12-05 16:56 思思博士 阅读(...) 评论(...) 编辑 收藏加载==》链接==》初始化==》使用==》卸载
加载:将.class文件转换成字节流,这一步完成之后到链接步骤
链接步骤是对字节流进行验证、准备,解析三个过程。
验证:确保被加载的文件正确性和安全性。
正确性:确保.class文件解析成字节流后,是可以使用的。
安全性:不至于危害虚拟机。
而验证又分为文件验证,元数据验证,字节码验证,符号引用验证。
文件验证:校验.class文件符合虚拟机规范。
元数据验证:对类层面的语法进行分析,类信息符合java规范。
字节码验证:主要验证类语法符合逻辑,不会危害java安全
符号引用验证:对类以外的信息进行校验,确保解析动作能够完成。
准备:为类变量分配内存并设置初始值。
public static int value=2;
在这个阶段会在方法区分配内存,并且赋值为0.
public final static int value=2;
这个是在编译的时候就把值确定了,分配在静态常量池中,
在这个阶段会把它从静态常量池加载到方法区中。
解析:将静态常量池中的符号引用转化成方法区中的直接引用。
符号引用:以一组虚拟机自己能够认识的符号标识所引用的目标。
比如一个人有可能叫张三,同时可能叫二狗子;他们都是指向同一个人。
直接引用:就是我们平时常说的空指针异常的指针了,就是在虚拟机内存中直接指向这个对象的指针。
主要解析对象是类,接口,字段,类方法,接口方法(我只能想到这么多了)等
初始化:初始化是在第一次使用这个类的时候进行的。而上面的步骤是在便于这一步的初始化。
第一次使用是什么时候呢?
1.new的时候,初始化的实例信息放在堆中,而静态信息放在方法区中
2.访问某个类或接口的静态变量或方法时
3.new某个字类,父类会被一同初始化
4.启动类
5.对某个类进行反射操作。
当然如果这个类之前已经初始化过了,再次访问就不需要初始化了。
初始化的最终结果是将这些类信息存储在方法区中。
并且把之前默认的静态变量赋值成我们指定的变量
说了这么一大坨东西,这些动作都是有谁来执行的呢?
答案是类加载器
原文链接:https://www.cnblogs.com/guoyansi19900907/p/11990403.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 深入浅出 Java 类加载机制! 2020-06-05
- Java提示错误: 找不到或无法加载主类 2020-05-27
- 针对kafka_2.13版本测试过程中的一些坑 2020-05-23
- java 类加载系统 2020-05-22
- Java窗体加载时不显示组件或需要重置窗口 2020-05-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash