博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实例的初始化过程: new 对象
阅读量:4315 次
发布时间:2019-06-06

本文共 978 字,大约阅读时间需要 3 分钟。

类的加载过程:
1.JVM会先去方法区中找有没有相对应类的.class存在。如果有就直接使用,如果没有,则把相关类的.class 加载到方法区
2.在.class加载到方法区时,会分为两部分加载:先加载非静态内容,再加载静态内容
3.加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内
4.加载静态内容:
   4.1: 把.class的所有静态内容加载到方法区下的静态区域内
   4.2: 静态内容加载完成后,对所有的静态变量进行默认初始化
   4.3:  静态变量默认初始化完成之后,对其进行显示初始化
   4.4: 当静态区域下的所有静态变量显示初始化完成之后,执行静态代码块
5.  当静态区域的静态代码块执行完之后,整个类就加载完了
6.  如果存在继承关系,那么父类先加载,再加载子类

在加载静态的过程中,先要加载静态的成员变量,然后再加载静态代码块,之后再加载静态的成员方法。

 

实例的初始化过程: new 对象
1. 在堆中开辟一块空间 这块空间会分割成两份 一份是super 一份是this
2. 给开辟的空间分配一个地址
3. 把对象的所有非静态成员加载到所开辟的空间中
4. 所有的非静态成员加载完毕后,对所有的非静态成员变量进行默认初始化
5. 所有的非静态成员变量默认初始化之后,调用构造函数
6 构造方法进入栈内存执行,分为两部分:先执行构造方法的隐式三步,再执行构造方法中书写的代码
隐式三步:
1. 执行super()语句 所有的类都是object的子类,每个方法中都有默认的super() 如果定义了有参构造,那么原来的就会被覆盖掉
2. 对开辟空间下的所有非静态成员变量进行赋值(显示初始化)
3. 执行构造代码块 { }
7. 隐式三步执行后,执行构造函数中的代码
8.再整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个引用对象(最后才把地址值赋值给栈中使用)
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

附件列表

 

转载于:https://www.cnblogs.com/byj2606616222/p/920fe3cd59dec3b1ea0fc10db55edcfa.html

你可能感兴趣的文章
Oracle the network adapter could not establish the connection
查看>>
powerdesigner 不显示表字段只显示表名
查看>>
《分布式任务调度平台XXL-JOB》
查看>>
SQL分布式查询、跨数据库查询
查看>>
python国内豆瓣源
查看>>
redux、immutablejs和mobx性能对比(三)
查看>>
jQuery实现简单而且很酷的返回顶部链接效果
查看>>
mac 终端 常用命令
查看>>
EGL接口介绍-----Android OpenGL ES底层开发
查看>>
电梯调度程序的UI设计
查看>>
转自 zera php中extends和implements的区别
查看>>
Array.of使用实例
查看>>
【Luogu】P2498拯救小云公主(spfa)
查看>>
如何获取网站icon
查看>>
几种排序写法
查看>>
java 多线程的应用场景
查看>>
dell support
查看>>
CodeForces 1037B Reach Median_贪心
查看>>
cmdb项目实现方案
查看>>
微信自定义分享到朋友圈
查看>>