关于Java执行机制的问题



```java
public class Base1 {
    int i = 0;
    {
        System.out.println("In Base1 Initial block:i=" + i++); //①
    }   // j++;

    Base1() {
        System.out.println("In Base1 constructor:i=" + i++);
    }  // Base1(0);  ②

    Base1(int j) {
        this.j = j;
    }

    int j = 0;

    public static void main(String[] args) {  //主方法
        Child c = new Child();
    }
}

class Child extends Base1 {
    int i = 0;

    {
        System.out.println("In Base1 Initial block:i=" + i++); //③
    } // j++;

    Child() {
        System.out.println("In Child constructor:i=" + i);
    } //super(); //④
}

请问这段代码的执行机制是什么,求详解!


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/89905951608617.png "#left")

参考:https://blog.csdn.net/CoderTnT/article/details/126428706

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/740970
  • 你也可以参考下这篇文章:基于Java的冒泡排序法
  • 除此之外, 这篇博客: 详解java静态数组中的 特点 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 可以存储基本数据类型
      其他集合只能存储对象,不能存储基本数据类型。但自动拆箱、装箱技术的出现,使其他集合也可以存储基本数据类型。

    • 数组一旦声明,其大小不能发生改变
      静态数组称呼的由来。
      该特点导致在实际编程中基本不使用数组,而是其他动态容器(ArrayList等)

    • 数组元素逻辑删除
      数组初始化后,数组元素只能在逻辑层面删除。在物理层面,其值已写入内存,只能被覆盖,不能被物理删除。在java体系中,若数组存储对象时,数组元素被逻辑删除之后,物理地址上的值依旧存在,此时GC无法将其回收。因此,此种情况下删除数组元素对象的同时,可将其置空,使其被GC回收。

    • 使用整型索引随机访问元素,下标从0开始
      随机访问的实现基于数组在内存中的连续存储。数组名指向数组元素的起始位置地址,索引下标是相对于起始地址的偏移量,操作系统在知道起始地址和偏移量之后,可立马获取对应地址上的内容,即所谓的随机访问。这同时也导致数组是存取效率最高的数据容器。但为保证数组各个元素内存仍旧连续,因此在插入和删除时需要移动元素(实质是重新赋值,全部赋值动作整体来看是一种移动效果),其操作效率比较耗时。

      数组内存层面的最基本操作是按照索引存取元素、获取数组长度。使用层面的基本操作基于内存上的基本操作,包括增删改查、排序等

  • 您还可以看一下 盛健华老师的Java零基础快速入门课程中的 JAVA的运行机制小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^