类加载和对象创建的执行顺序+例子

父类静态代码块 → 子类静态代码块 → 父类非静态代码块 → 父类构造函数 → 子类非静态代码块 → 子类构造函数

java 复制代码
class Animal {
    static {
        System.out.println("父类静态代码块");
    }
    
    {
        System.out.println("父类非静态代码块");
    }
    
    public Animal() {
        System.out.println("父类构造函数");
    }
}

class Dog extends Animal {
    static {
        System.out.println("子类静态代码块");
    }
    
    {
        System.out.println("子类非静态代码块");
    }
    
    public Dog() {
        System.out.println("子类构造方法");
    }
}

public class Main {
    public static void main(String[] args) {
        new Dog();
    }
}

执行输出:

复制代码
父类静态代码块
子类静态代码块
父类非静态代码块
父类构造函数
子类非静态代码块
子类构造方法

关键说明:

  1. 静态代码块static { })在类加载时执行(只执行一次),先父类后子类
  2. 非静态代码块{ })在对象创建时执行(每次创建对象都会执行),先父类后子类
  3. 构造函数在非静态代码块之后执行,同样先父类后子类
相关推荐
市场部需要一个软件开发岗位几秒前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
忆~遂愿5 分钟前
GE 引擎进阶:依赖图的原子性管理与异构算子协作调度
java·开发语言·人工智能
MZ_ZXD0019 分钟前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
PP东12 分钟前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
ManThink Technology17 分钟前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
invicinble21 分钟前
springboot的核心实现机制原理
java·spring boot·后端
人道领域29 分钟前
SSM框架从入门到入土(AOP面向切面编程)
java·开发语言
大模型玩家七七1 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
CodeToGym1 小时前
【Java 办公自动化】Apache POI 入门:手把手教你实现 Excel 导入与导出
java·apache·excel
凡人叶枫2 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发