一、 代码执行流程
先看看代码块的运行结果,再总结代码块的执行顺序
package com.crn.demo.exam; class Parent{ static String name = "hello"; { System.out.println("3 parent block"); } static { System.out.println("1 parent static block"); } public Parent(){ System.out.println("4 parent constructor"); } } class Child extends Parent{ static String childName = "hello"; { System.out.println("5 child block"); } static { System.out.println("2 child static block"); } public Child(){ System.out.println("6 child constructor"); } } public class StaticIniBlockOrderTest { public static void main(String[] args) { new Child();//语句(*) } }
代码执行结果如下:
1 parent static block
2 child static block
3 parent block
4 parent constructor
5 child block
6 child constructor
二、 Java 静态语句块、语句块、构造函数执行顺序
1)执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容;
2)当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构 造方法;
3)父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。
总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
而且子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
相关推荐
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...
在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...
在此示例中,基类的构造函数在执行构造函数块之前被调用。base关键字可带参数使用,也可不带参数使用。构造函数的任何参数都可用作base的参数,或用作表达式的一部分。 重写重载构造函数是面向对象编程中的一种重要...
构造函数的执行顺序是从基类到派生类,确保所有层次的初始化都能正确进行。 #### 析构函数:清理非托管资源 **1. 原理与作用** 析构函数是一种特殊的成员函数,用于执行对象销毁前的清理工作,尤其是在处理非托管...
* 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的...
在C#编程语言中,函数方法、构造函数与析构函数是对象导向编程的重要组成部分,它们各自承担着不同的角色,并且对于程序的正确运行和优化性能具有重要作用。下面将详细介绍这三个概念及其用法。 ### 函数方法 在C#...
总结来说,Java中的自由块执行顺序是静态自由块在类加载时执行,非静态自由块在创建对象时执行,并且遵循继承的层次结构。理解这一执行顺序有助于优化代码,避免在类加载和对象创建过程中出现预期之外的行为。
每当创建类的新实例时,构造代码块就会执行,且它的执行顺序优先于类的构造函数。这意味着,如果在构造代码块中有初始化操作,这些操作会在构造函数执行之前完成。如果类中有多条构造代码块,它们也会按照在类中定义...
#### 四、静态语句块与构造函数 除了静态成员变量和静态方法之外,Java还支持静态语句块。静态语句块通常用于执行一些只需要运行一次的初始化操作,在类加载时被执行。 ##### 示例代码分析: ```java class ...
3. **构造函数体内的语句**:最后,执行构造函数主体中的代码。 例如,在给定的代码示例中,类`E`继承自`B`和`A`,并且拥有成员对象`D`和`C`。根据上述规则,构造顺序为:`B(5)`(因为`B(5)`在成员初始化列表中被...
构造函数调用的顺序遵循成员在类定义中的声明顺序,这意味着初始化列表中的成员初始化顺序也应与声明顺序一致。 最后,析构函数是与构造函数相对的特殊成员函数,用于在对象生命周期结束时执行清理工作,如释放动态...
7. **执行顺序**:当有类继承关系时,基类的静态构造函数先于派生类的静态构造函数执行。 8. **不可显式调用**:由于静态构造函数由系统自动调用,我们无法在代码中显式地调用它,也无法控制它的执行时机。 9. **...
在Java编程语言中,代码块是程序中一组按顺序执行的语句,它们可以有特定的作用域和执行时机。在日常练习33中,我们关注的是三种不同类型的代码块:静态代码块、构造器代码块和局部代码块。下面将详细讲解这三种代码...
这是构造函数体之外的一组初始化语句,它以冒号(:)开始,然后列出要初始化的成员及其对应的值。例如: ```cpp MyClass::MyClass(int val) : member1(val), member2(val * 2) {} ``` 这里,`member1`和`member2`在...
尽管枚举默认是final和静态的,但我们仍然可以为枚举类型定义构造函数。枚举构造函数主要用于初始化枚举实例的内部状态,但需要注意,构造函数不能被外部直接调用,只能在枚举实例的定义中使用。例如: ```java ...
11、A 为类,执行语句 A a1,a2(2),*a3[3];调用了 A 的构造函数 6 次。N 12、派生类后于基类构造,先于基类释放。Y 13、类是对象的抽象,对象是类的具体化。Y 14、二进制文件中数据的存放格式和计算机内存中存储的...
虚基类的构造函数会在非虚基类之前调用(选项B错误),如果有多个虚基类,构造函数按声明顺序调用(选项C正确),即使虚基类是从非虚基类派生的,也会先调用基类构造函数,然后是派生类构造函数(选项D正确)。...
Java允许在同一个类中定义多个同名函数,只要它们的参数列表不同(参数个数、类型或顺序不同)。这是方法重载的概念,有助于提高代码的可读性和复用性。 4. **递归函数**: 递归函数是调用自己的函数,通常用于...