.net类的初始化机制,顺序,内存分配,

.net类的初始化机制,顺序,内存分配,

大家好,又见面了,我是全栈君。

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

&#9733;类成员的初始化顺序, 举例 ChildClass从ParentClass继承而来
ChildClass child = new ChildClass();

1. 初始化ChildClass的静态字段(按声明顺序)
2. 初始化ChildClass的静态构造函数
3. 初始化ChildClass的实例字段
4. 调用ChildClass的构造函数,并在此中断, 调用ParentClass的构造函数, 导致ParentClass开始初始化
5. 初始化ParentClass的静态字段
6. 初始化ParentClass的静态构造函数
7. 初始化ParentClass的实例字段
8. 调用ParentClass的实例构造函数
9. ParentClass初始化完毕, 调用ChildClass的构造函数,完成创建

&#9733;如果多重继承,将按上面方式展开,静态构造函数和静态字段都只构造一次.
&#9733;如果类没有实例化以前,调用该类的静态方法(字段),会引起类的静态字段实例化, 调用静态构造函数. 以后再实例化此类的时候,不再重新实例化静态字段和静态构造函数

&#9733;这种初始化顺序是由内存分配机制决定的,如我们调用MyClass myClass = new MyClass(), 其产生对象如下:
1. 计算该类中定义的所有实例字段的size和两个附加对象(type handler(类对象的指针)和syncBlockIndex(指向一块用来管理对象同步的内存))的size并一直递归到object对象,得到其需要分配内存大小, 看剩余内存是否够分配此对象, 不够会导致垃圾回收.
2. 首先构造MyClass的type对象,type对象包括静态字段和方法表,将其分配在托管堆的loader堆上,注意此对象将不会被GC自动回收, 其生命周期是从创建到AppDomain卸载.
3. 构造MyClass的实例字段,构造附加type handler并指向type对象, 构造SyncBlockIndex并指向同步内存.
4. 调用MyClass构造函数,此时会引起其父类初始化, 父类初始化循环上述过程,直至object对象完成创建, 再返回执行子类构造函数直至MyClass, 创建MyClass完成后, 返回其内存地址, 赋值给MyClass的this,并将其引用传给栈上声明的myClass.

本文转自 netcorner 博客园博客,原文链接:http://www.cnblogs.com/netcorner/archive/2008/05/10/2912152.html  ,如需转载请自行联系原作者

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107958.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python图像轮廓识别_python数字图像处理

    python图像轮廓识别_python数字图像处理前面一篇文章介绍了图像分类知识,包括常见的图像分类算法,并介绍Python环境下的贝叶斯图像分类算法、基于KNN算法的图像分类和基于神经网络算法的图像分类等案例。这篇文章将详细讲解图像分割知识,包括阈值分割、边缘分割、纹理分割、分水岭算法、K-Means分割、漫水填充分割、区域定位等。万字长文整理,希望对您有所帮助。同时,该部分知识均为作者查阅资料撰写总结,并且开设成了收费专栏,为小宝赚点奶粉钱,感谢您的抬爱。当然如果您是在读学生或经济拮据,可以私聊我给你每篇文章开白名单,或者转发原文给你,更希望您能进步

    2022年10月7日
    0
  • 利用ADB命令强制卸载oppo自带浏览器

    利用ADB命令强制卸载oppo自带浏览器

    2020年11月19日
    656
  • style对象的cssText方法

    style对象的cssText方法cssText本质是什么?  cssText的本质就是设置HTML元素的style属性值。cssText怎么用?domElement.style.cssText=”color:…

    2022年7月26日
    1
  • java hashmap 遍历删除元素_java 中 HashMap 遍历与删除[通俗易懂]

    java hashmap 遍历删除元素_java 中 HashMap 遍历与删除[通俗易懂]HashMap的遍历方法一、这是最常见的并且在大多数情况下也是最可取的遍历方式/***在键值都需要时使用*/Mapmap=newHashMap();for(Map.Entryentry:map.entrySet()){System.out.println(“Key=”+entry.getKey()+”,Value=”+entry.getValue());}方法…

    2022年9月3日
    5
  • pycharm推荐配色和字体_pycharm主题配色方案

    pycharm推荐配色和字体_pycharm主题配色方案pycharm的默认主题和字体什么的真是不敢恭维,尤其是在用惯了vscode的onedarkpro主题后,再看pycharm真是觉得有点。。。在网上找了许久,找到一款类似onedarkpro的主题,同时还下载了彩色括号的插件,换上类似vscode的字体,pycharm顿时顺眼多了。度云自取:https://pan.baidu.com/s/1Ia6oryWUXV3TKT0wjzbAc…

    2022年8月25日
    3
  • DVP和MIPI接口的简单区别

    DVP和MIPI接口的简单区别区别1、DVP接口:DVP是并行传输,传输速度较慢,传输的带宽低。2、MIPI接口:MIPI是差分串行传输,速度快,抗干扰。目前分为D/C/MPHY三类。主流手机模组现在是使用MIPI_DPHY或CPHY传输:DPHY传输时使用4对差分信号传输图像数据和一对差分时钟信号。CPHY使用3组每组3根单端信号传输数据,每根单端信号能表达3个逻辑电平,相比数据传输率更高,使用引脚数更少。1、DVP接口:使用需要PCLK\sensor输出时钟、MCLK(XCLK)\外部时钟输入、VSYNC\场同步、

    2022年6月1日
    156

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号