首页 > 其他分享 >第三周课程总结:静态初始化块的执行顺序

第三周课程总结:静态初始化块的执行顺序

时间:2022-10-15 16:55:35浏览次数:50  
标签:初始化 Leaf 静态 第三周 Mid System println out

  遵循老师的指引,我运行了以下代码:

package movehands3_1;
class Root
{
static
{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static
{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static
{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}

}

public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf();

}
}

其运行结果为——

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:Java初始化顺序演示
Leaf的普通初始化块
执行Leaf的构造器

  我们发现被static修饰的静态初始化块的执行是排在普通字段和构造函数的前面的,而后两者的顺序由代码顺序决定属于同一层次,即在同一个类或者按如上方式继承自同一基类时,程序会按照从祖到孙的顺序,先静态初始化块,再按照每类中三种“普通的初”始化方法的顺序来执行。

  静态初始化块的执行具有最高优先级,子类的创建会导致父类静态初始化块的运行,因此出现了从祖到孙的静态初始化顺序,同理,优先级较低的普通初始化块和构造函数因为处于同一优先级,所以它们的执行成对出现,也因为子类的创建会调用父类代码,所以导致”普通初始化块\n构造器\n“按照Root、Mid、Leaf的顺序依次成对打印。

标签:初始化,Leaf,静态,第三周,Mid,System,println,out
From: https://www.cnblogs.com/xxaxf/p/16794506.html

相关文章

  • 第三周课总结:类中字段初始化谁说的算
    一个类中字段的初始化方式分为三种——成员设置的初始化值、类的构造函数、初始化块;我们来看下面一段代码:publicclassInitializeBlockClass{ { field=200; } publ......
  • 静态代码,内部类,枚举类练习
    1.静态代码块练习1.在Frock类中声明私有的静态属性currentNum[int类型],初始值为100000,作为衣服出厂的序列号起始值。2.声明公有的静态方法getNextNum;作为生成上衣唯一序......
  • 153-《大数据架构师》Flink Task 部署、初始化和启动详解_ev
                                                     ......
  • [Spring] spring.datasource.schema数据库初始化脚本不生效的问题
    问题在新版本(2.7)中,spring.datasource.schema数据库初始化脚本不生效spring.datasource.mode=alwaysspring.datasource.schema=classpath:sql/schema.sql解决方法......
  • 全局变量,局部变量,静态变量,外部变量的区别
    变量分类 作用域分类局部变量(默认是自动局部变量)1.定义:在一个函数内部定义的变量(包括函数形参)2.有效范围:一直在本函数有效3.变量存储:栈内存,函数结束之后自动销毁4.......
  • Linux系统编程02-静态库
    库简单的看作可以直接拿来使用的代码仓库静态库在程序的链接阶段被复制到了程序中动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程......
  • git初始化远程仓库推送
    Git全局设置:gitconfig--globaluser.name"蒂尔"gitconfig--globaluser.email"[email protected]"创建git仓库:mkdirreactor-webfluxcdreactor-webfluxgi......
  • LcdTools如何编写MIPI指令(初始化代码)
    在LcdTools帮助文档中查看MIPI读写指令描述,如下图    编写LCM初始化代码就是配置LCMDriverIC寄存器值,一般只需用MipiWrite()指令写参数即可;下面......
  • Linux初始化init系统
    近年来,​​Linux​​​ 系统的 ​​init​​​ 进程经历了两次重大的演进,传统的 ​​sysvinit​​​ 已经淡出历史舞台,新的 ​​init​​​ 系统 ​​UpStart​​​......
  • vue初始化
    初始化脚手架###**说明**1.Vue脚手架是Vue官方提供的标准化开发工具(开发平台)。最新的版本是4.x。文档:https://cli.vuejs.org/zh/。具体步骤第一......