zoukankan      html  css  js  c++  java
  • 基类和导入类的程序执行过程

    该实验打印的结果如下所示:

    ee

    dd

    gg

    cc

    ff

    bb

    结论,程序的执行顺序是这样的:

    1、导入demo1类文件,执行main方法;

    2、检查到类变量bb d1;

    3、加载bb类的基类cc,并初始化cc类的static域;(这时候打印出了ee)

    4、加载bb类,并初始化bb类的static域;(这时候打印出了dd)

    5、执行了new bb();(创建了bb对象)

    6、为基类cc的成员变量开辟内存并初始化;(这时候打印出了gg)

    7、执行基类cc的构造函数;(这时候打印出了cc)

    8、为bb的成员变量开辟内存并初始化;(这时候打印出了ff)

    9、执行bb类的构造函数;(这时候打印出了bb)

    根据第四版的《Think in Java》,第八章的“多态”第163页的实验总结:

    基类和导出类的执行顺序;

    (1)类加载,如果有基类,先加载基类;

    (2)执行基类的static域,然后执行导出类的static域;

    如果有new calss“导出类”();

    (3)开辟导出类对象的内存空间,并对内存清零;开辟基类的对象内存空间,并对内存清零;(为什么是先导出类开辟内存,这里请参考P131,因为基类对象其实是导出类对象的第一个成员变量,而且是private的)

    (4)初始化基类的成员变量,然后执行基类的构造函数;(如果此时调用了被导出类重写覆盖了的方法,那么会发送多态效应)

    (5)初始化导出类的成员变量,然后执行导出类的构造函数;

  • 相关阅读:
    vue 组件之间的通讯方式
    vue 路由4种传参方式
    vue+axios封装已文件流的形式导出文件
    vue 开发环境正常打包之后背景图片无法访问或者element-ui的icon找不到
    vue 优化webpack引入CND
    microtime() — 返回当前 Unix 时间戳和微秒数
    将一个字符串分隔为组成它的字符
    Laravel 伪静态配置
    VSCode
    array_merge()&array_combine()合并数组函数
  • 原文地址:https://www.cnblogs.com/chencanjian/p/6000457.html
Copyright © 2011-2022 走看看