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)初始化导出类的成员变量,然后执行导出类的构造函数;

  • 相关阅读:
    LC.225. Implement Stack using Queues(using two queues)
    LC.232. Implement Queue using Stacks(use two stacks)
    sort numbers with two stacks(many duplicates)
    LC.154. Find Minimum in Rotated Sorted Array II
    LC.81. Search in Rotated Sorted Array II
    LC.35.Search Insert Position
    前后端分离:(一)
    Redis基本使用(一)
    GIT篇章(二)
    GIT篇章(一)
  • 原文地址:https://www.cnblogs.com/chencanjian/p/6000457.html
Copyright © 2011-2022 走看看