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

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

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. 构造函数在非静态代码块之后执行,同样先父类后子类
相关推荐
王桑.1 小时前
WebSocket---一种用于实时传输的网络协议
java·websocket·spring·java-ee
CoderYanger1 小时前
递归、搜索与回溯-综合练习:28.不同路径Ⅲ
java·算法·leetcode·深度优先·1024程序员节
鱼丸花生1 小时前
Java 数组详解
java
用户84913717547161 小时前
Tomcat 为什么要“造反”?深度解析 Java 类加载机制的“守”与“破”
java·jvm
jiayong231 小时前
Elasticsearch Java 开发完全指南
java·大数据·elasticsearch
321茄子1 小时前
MySQL 事务隔离性及锁
java·数据库·mysql
杀死那个蝈坦1 小时前
UV 统计(独立访客统计)
java·jvm·spring·kafka·tomcat·maven
带刺的坐椅1 小时前
Solon AI 开发学习7 - chat - 四种消息类型及提示语增强
java·ai·llm·solon
济宁雪人1 小时前
Java安全基础——序列化/反序列化
java·开发语言