Java对象初始化过程代码块和构造器的调用顺序

对于Java对象的初始化过程,可以分为三个步骤:成员变量的初始化、代码块的初始化和构造器的初始化。这三个步骤的执行顺序如下:

  1. 父类的成员变量初始化。
  2. 父类的静态代码块初始化。
  3. 子类的成员变量初始化。
  4. 子类的静态代码块初始化。
  5. 父类的代码块初始化。
  6. 父类的构造器初始化。
  7. 子类的代码块初始化。
  8. 子类的构造器初始化。

其中,静态代码块是在类加载时执行,只会执行一次,而普通代码块和构造器是在对象的创建过程中执行的。

下面通过两个示例说明Java对象初始化过程中代码块和构造器的调用顺序:

示例1:

public class Test {
    static {
        System.out.println("静态代码块");
    }

    {
        System.out.println("代码块");
    }

    public Test() {
        System.out.println("构造器");
    }

    public static void main(String[] args) {
        new Test();
    }
}

执行上面的代码,输出结果如下:

静态代码块
代码块
构造器

可以看到,静态代码块先于所有代码块和构造器执行,代码块在构造器之前执行。

示例2:

public class Father {
    static {
        System.out.println("父类静态代码块");
    }

    {
        System.out.println("父类代码块");
    }

    public Father() {
        System.out.println("父类构造器");
    }
}

public class Son extends Father {
    static {
        System.out.println("子类静态代码块");
    }

    {
        System.out.println("子类代码块");
    }

    public Son() {
        System.out.println("子类构造器");
    }

    public static void main(String[] args) {
        new Son();
    }
}

执行上面的代码,输出结果如下:

父类静态代码块
子类静态代码块
父类代码块
父类构造器
子类代码块
子类构造器

可以看到,父类的静态代码块和父类的构造器先于子类的代码块和子类的构造器执行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java对象初始化过程代码块和构造器的调用顺序 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • Netty NIO之ByteBuffer类基础学习

    以下是关于Netty NIO中ByteBuffer类的基础学习的完整攻略: Netty NIO之ByteBuffer类基础学习 1. ByteBuffer类简介 ByteBuffer是Java NIO中的一个关键类,用于处理数据的读写操作。它提供了一系列方法来操作字节数据,包括读取、写入、切换模式等。 2. 创建ByteBuffer对象 可以使用静态方法By…

    other 2023年10月14日
    00
  • oracle客户端安装及下载地址

    Oracle客户端安装及下载地址 Oracle客户端是连接Oracle数据库的必要组件,它集成了一系列工具,包括SQL Plus命令行工具、Oracle SQL Developer GUI工具、ODBC驱动程序等。本篇文章将介绍Oracle客户端的安装步骤以及下载地址。 下载Oracle客户端 在下载Oracle客户端之前,需要先确定所需版本号。如果要连接O…

    其他 2023年3月28日
    00
  • CSS网页布局的核心内容:CSS盒模型

    CSS网页布局的核心内容: CSS盒模型攻略 CSS盒模型是网页布局中的核心概念之一。它描述了在网页中的每个元素都被看作是一个矩形的盒子,这个盒子由内容区域、内边距、边框和外边距组成。理解CSS盒模型对于实现灵活的网页布局至关重要。 盒模型的组成部分 CSS盒模型由以下四个部分组成: 内容区域(Content):盒子中用于显示文本、图像或其他内容的区域。 内…

    other 2023年9月6日
    00
  • C++中的移动构造函数及move语句示例详解

    C++中的移动构造函数及move语句示例详解 什么是移动构造函数? 移动构造函数是C++11中新增的一种特殊的构造函数,用于在对象的移动语义下构造新对象。在C++中,移动构造函数的函数名为“移动构造函数”,使用特定的语法和方法来定义。对象在移动语义下被移动时,移动构造函数会被自动调用,其中源对象的数据块会被转移,并被用于新的对象的构造中。 移动构造函数通常用…

    other 2023年6月26日
    00
  • flash cs6类加载和应用程序域有什么作用?

    Flash CS6中的类加载和应用程序域主要作用于Flash应用程序的模块化开发和优化。类加载可以让我们在使用当前应用程序的同时,动态的添加或移除一些可选的模块。应用程序域则可以控制不同类之间的相互访问。 类加载 加载外部类库 动态加载外部AS文件,并将其中一个类创建为对象。可以使用Loader来完成这个任务,代码如下: //获取外部AS文件的文件位置 va…

    other 2023年6月25日
    00
  • 关于cuda:何时调用cudadevicesynchronize?

    关于cuda:何时调用cudadevicesynchronize? 在使用CUDA进行GPU编程时,我们需要了解何时调用cudaDeviceSynchronize()函数。本文将详细讲解DeviceSynchronize()函数的作用、使用方法和示例。 cudaDeviceSynchronize()函数的用 cudaDeviceSynchronize()函数…

    other 2023年5月8日
    00
  • latex各行公式编号右对齐

    LaTeX 各行公式编号右对齐 在使用 LaTeX 进行文档排版时,经常会使用到公式环境。默认情况下,LaTeX 将公式按照自己的规则进行编号和对齐。但有时候我们需要自定义公式的编号和对齐方式。本文将介绍如何使用 LaTeX 实现各行公式编号右对齐。 实现方法 在 LaTeX 中,我们可以使用 align 环境来排版多行公式。默认情况下,align 环境中每…

    其他 2023年3月28日
    00
  • 实现core文件自动生成配置文件的方法

    实现Core文件自动生成配置文件的方法有以下步骤: 1. 确认系统支持coredump 要生成Core文件,需要确认系统已经打开了生成Core文件的权限。可以通过以下方式查看: ulimit -a 如果core file size显示为0,则需要修改设置: ulimit -c unlimited 2. 确认系统生成了Core文件 当程序崩溃时,会生成Core…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部