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

yizhihongxing

对于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日

相关文章

  • 如何在json中转义双引号

    在JSON中,如果需要在字符串中包含双引号,需要使用反斜杠(\)进行转义。下面是两个示例说明: 示例一:在JSON字符串中转义双引号 { "name": "John", "message": "He said, \"Hello, world!\"" } 在这个…

    other 2023年5月8日
    00
  • Win11 Build 2262x.1470今日发布(附KB5023780更新内容汇总)

    Win11 Build 2262x.1470今日发布(附KB5023780更新内容汇总)攻略 今天,Win11 Build 2262x.1470发布了,这是一次重要的更新。本攻略将详细介绍如何安装和使用这个版本,并提供KB5023780更新内容的汇总。 安装Win11 Build 2262x.1470 首先,确保你的计算机符合Win11的系统要求。这包括64…

    other 2023年8月3日
    00
  • 方法集锦,怎样查找对方的IP地址?

    方法集锦:如何查找对方的IP地址? 1. 通过电子邮件头部信息查找IP地址 当你收到一封电子邮件时,你可以通过查看邮件头部信息来获取发送者的IP地址。以下是查找IP地址的步骤: 打开你的电子邮件客户端,并选择要查看的邮件。 在邮件中,查找一个名为“邮件头”、“原始邮件”或类似的选项。这个选项通常在邮件的菜单栏或设置中。 一旦找到邮件头部信息,复制整个邮件头部…

    other 2023年7月30日
    00
  • Centos7升级glibc导致系统异常(无法开机)解决方法

    标准过程攻略:Centos7升级glibc导致系统异常(无法开机)解决方法 背景描述 在Centos7系统中,如果升级glibc库到一定版本可能会导致系统无法开机。这是因为glibc库是整个系统中非常重要的一个库,它被许多系统组件和服务依赖。如果更新不当会导致系统出现异常,甚至无法启动。因此,升级glibc库前需要格外小心。 解决方法 1.保证原始版本的gl…

    other 2023年6月27日
    00
  • C语言的字符函数和字符串函数详解

    C语言的字符函数和字符串函数详解 字符函数 isalpha 函数原型:int isalpha(int c); 函数功能:判断c是否为英文字母 示例代码: #include <stdio.h> #include <ctype.h> int main() { char c = ‘a’; if(isalpha(c)) printf(&quo…

    other 2023年6月20日
    00
  • 使用filebeat收集日志传输到redis的各种效果展示

    使用Filebeat收集日志传输到Redis的完整攻略 Filebeat是一个轻量级的日志收集器,可以将日志数据从服务器发送到Elasticsearch、Logstash或Kafka等数据存储和分析平台。本文将介绍如何使用Filebeat将日志数据收集并传输到Redis中。 1. 安装和配置Filebeat 1.1 下载和安装Filebeat 首先,需要从F…

    other 2023年5月5日
    00
  • C++中 set的用法

    C++中set的用法攻略 1. 引言 在C++中,set是一个容器类模板,用于存储一组唯一的元素,并按照一定的顺序进行排序。set容器中的元素默认按照升序排列,且不允许重复。本攻略将详细介绍set的用法,包括创建、插入、删除、查找等操作。 2. 创建set对象 要使用set容器,首先需要包含头文件<set>。然后可以使用以下语法创建一个set对象…

    other 2023年8月6日
    00
  • ASP.NET 动态写入服务器端控件

    当ASP.NET页面需要动态组装控件时,可以利用服务器端控件动态写入HTML标记来实现。通常使用Panel控件或Literal控件来实现。 下面是使用Panel控件和Literal控件来实现在服务端动态写入HTML标记的两个示例。 示例一:使用Panel控件动态添加控件 1.在aspx页面上添加一个Panel控件,并设置它的ID为panel1。 <as…

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