JAVA类的加载、连接、初始化
来源:互联网 发布:痤疮激光治疗知乎 编辑:程序博客网 时间:2024/05/29 15:08
类从加载到虚拟机到卸载,它的整个生命周期包括:装载(Loading),验证(Validation),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)。其中,验证、准备和解析部分被称为连接(Linking)。
简单的分析:
至于使用和卸载阶段阶段,这里不再过多说明,使用过程就是根据程序定义的行为执行,卸载由GC完成。
- 1:装载,通过类的全名产生对应类的二进制数据流,分析二进制数据流并转换为方法区特定的数据结构,创建对应类的java.lang.Class实例。
- 2:链接,
- 分为检测(确保被导入类型的正确性。),
- 准备(为类变量分配内存,并将其初始化为默认值),
- 解析(把类型中的符号引用转换成直接引用)三步。
- 3:初始化,把类变量(static)初始化为正确初始值。
- 类变量的初始化(有赋值操作),无论是基本数据类型还是引用数据类型,类变量的初始化都会被提取到clinit方法中。
- 常量的初始化,对于基本数据类型来说,会直接被编译器生成constant值。而对于引用数据类型常量的初始化会被提取到clinit方法中。
关于继承时的类中的变量加载顺序以及方法的调用,简单分享下:
先父类的静态变量/静态块的初始化-----------父类的实例变量的初始化----父类的构造函数(其中存在方法的调用的,这个方法会调用子类的方法,若这个方法中有变量的操作,那么变量是子类的默认值,比如调用一个tell()方法;另外有一点不同:若调用的是print(name)方法,由于这个name变量在父类中已经赋值,方法将调用的是子类的方法,但是传递的name的值是父类的name值。(这一点我自己也有点想不通,大牛看过可以赐教下!))--------子类的静态-------子类的非静态---------子类的构造函数------------
本文是阿龙参考别的文章,自己又根据自己的认知,改变了一些东西。仅供参考!
- java类的加载、连接和初始化
- Java类的加载、连接和初始化
- JAVA类的加载、连接、初始化
- JAVA REVIEW_JVM类的加载、连接、初始化
- Java类的加载、连接和初始化
- 类的加载连接初始化
- 类的加载连接初始化
- Java虚拟机的加载、连接和初始化
- Java虚拟机的加载、连接和初始化
- 类的加载,连接,初始化详解
- 类的加载,连接,初始化详解
- 类的加载,连接,初始化详解
- 黑马程序员 类的加载、连接、初始化
- 类的加载、连接、初始化、反射
- 类的加载、连接和初始化:
- [置顶]类的加载连接初始化
- 类的加载、连接与初始化
- 类的加载、连接和初始化
- 导入其它css文件
- poj 2528 Mayor's posters (区间更新)
- 运行和控制Nginx
- 数据结构与算法目录
- 三门问题
- JAVA类的加载、连接、初始化
- Java排序算法总结(一):插入排序
- LoadRunner的协议学习
- Codeforces-353C
- 翻转n个硬币的问题
- CTreeCtrl的用法
- ios开发-获取手机相关信息
- CCAnimation创建动画cocos2d-x教程
- 桂林seo看今日百度搜索引擎