Java代码块(静态和非静态)在子父类中的执行顺序

简介: Java代码块(静态和非静态)在子父类中的执行顺序

话不多说,直接上代码:

/*** @Author: YuShiwen* @Date: 2020/11/17 9:01 PM* @Version: 1.0*/classRoot{
static{
System.out.println("Root static block");
    }
    {
System.out.println("Root no static block");
    }
publicRoot(){
super();
System.out.println("Root no parameter");
    }
}
classMidextendsRoot{
static{
System.out.println("Mid static block");
    }
    {
System.out.println("Mid no static block");
    }
publicMid(){
super();
System.out.println("Mid no parameter");
    }
publicMid(Stringmsg){
this();
System.out.println("Mid constructor:"+msg);
    }
}
classLeafextendsMid{
static{
System.out.println("Leaf static block");
    }
    {
System.out.println("Leaf no static block");
    }
publicLeaf(){
super("YuShiwen");
System.out.println("Leaf no parameter");
    }
}
publicclassLeafTest {
publicstaticvoidmain(String[] args) {
newLeaf();
System.out.println();
newLeaf();
    }
}

输出结果:

RootstaticblockMidstaticblockLeafstaticblockRootnostaticblockRootnoparameterMidnostaticblockMidnoparameterMidconstructor:YuShiwenLeafnostaticblockLeafnoparameterRootnostaticblockRootnoparameterMidnostaticblockMidnoparameterMidconstructor:YuShiwenLeafnostaticblockLeafnoparameterProcessfinishedwithexitcode0

代码分析:

可以看出,静态代码块内的语句由父类到子类最先执行,且只执行一次,这是因为静态代码块虽类的加载而加载;

之后每创建一次对象的时候,由父及子,先执父类中的普通代码块,再执行父类中的构造器,然后在执行子类中的普通代码块,再执行子类中的构造器。

目录
相关文章
|
15天前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
26 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
1月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
24 3
|
1月前
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
15 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
3月前
|
Java 程序员 API
从代码中寻找平衡:’java代码块和具体的代码应用
Java 8 引入的 Lambda 表达式是一项革命性特性,使编写简洁、灵活且易维护的代码成为可能。Lambda 表达式作为一种匿名函数,支持任意数量参数和返回值,其基本语法为 `(parameters) -> expression` 或 `(parameters) -> { statements; }`。
36 0
|
3月前
|
Java 数据安全/隐私保护
Java代码的执行顺序和构造方法
构造方法是类的一种特殊方法,用于初始化新对象。在 Java 中,每个类默认都有一个与类名同名的构造方法,无需返回类型。构造方法不能用 static、final、synchronized、abstract 或 native 修饰。它可以重载,通过不同的参数列表实现多种初始化方式。构造方法在对象实例化时自动调用,若未显式声明,默认提供一个无参构造方法。构造代码块和静态代码块分别用于对象和类的初始化,按特定顺序执行。
31 0
|
4月前
|
Java 程序员
【Java探索之旅】继承概念_语法_父类的成员访问
【Java探索之旅】继承概念_语法_父类的成员访问
54 10
|
3月前
|
Java
【Java】代码块
【Java】代码块
|
5月前
|
Java
Java代码的执行顺序
Java代码的执行顺序
33 1
|
5月前
|
设计模式 安全 Java
Java设计模式:代理模式的静态和动态之分(八)
Java设计模式:代理模式的静态和动态之分(八)
|
5月前
|
Java
Java中代码块区别及代码示例
Java中代码块区别及代码示例
31 0