静态初始化块与非静态初始化块

初始化块块分为静态初始化块与非静态初始化块,用 static 修饰的就是静态初始化块也称为类初始化块,没有用 static 修饰的代码块就是非静态初始化块也称为实例初始化块。

静态初始化块只会在类初始化的时候调用一次,而非静态初始化块则在每次类实例化的时候都会调用一次。

子类的第一次实例化的时候会先调用父类的静态初始化块,如果父类上面还有父类,则依次类推,最先调用的肯定是最大的父类的静态初始化块。等所有的静态代码块调用完成后,再调用父类的非静态初始化块,而后是子类的非静态初始化块。

初始化块虽然是类的成员之一,类成员有(成员变量、方法、构造器、初始化块),但它没有名字,也就没有标识,但是它并不能被类或者实例来调用,实例初始化块只在创建 JAVA 对象的隐式的执行,而且在构造器之前自动执行,而类初始化块则在类初始化的阶段自动执行。

我们通过简单的例子来说明一下

java 复制代码
public class Animal {
    
    static {
        System.out.println("父类静态初始化块");
    }
    {
        System.out.println("父类实例初始化块");
    }
    
    public Animal(){
        System.out.println("父类构造器");
    }
    
}

public Dog extends Animal {

    static {
        System.out.println("子类静态初始化块");
    }
    
    {
        System.out.println("子类实例初始化块");
    }
    
    public Dog(){
        System.out.println("子类构造器");
    }

}

public class test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Dog dog2 = new Dog();
    }
}

输出结果如下:

相关推荐
一只小萌新.7 分钟前
【Python学习(六)——While、for、循环控制、指数爆炸】
开发语言·python·学习
SuperSwaggySUP10 分钟前
挑战春招找到java后端实习第三天(1.4)
java·开发语言
confident316 分钟前
阶梯费用计算demo
java·前端·javascript
攒了一袋星辰16 分钟前
从零开始自搭SpringBoot项目 -- Qingluopay项目工程介绍
java·spring boot·后端
Java 第一深情21 分钟前
面试题解,Java中的“对象”剖析
java·jvm
兔爷眼红了23 分钟前
前端开发语言涉及到 的注解(Annotations)
开发语言·后端·golang
꧁坚持很酷꧂36 分钟前
Qt天气预报系统设计界面布局第四部分右边
开发语言·qt
花仙子16639 分钟前
C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡
开发语言·算法·c#
AmosCloud20131 小时前
3.5 字典树(Trie)与后缀树
开发语言·数据结构·链表·c#
计算机徐师兄1 小时前
Java基于SSM框架的影院选座系统小程序【附源码、文档】
java·微信小程序·影院选座系统·影院选座系统小程序·影院选座微信小程序·影院选座