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

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

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 分钟前
Android Framework不弹窗设置默认sim卡
android·java·framework
是一个Bug4 分钟前
Java基础 -> JVM -> 并发 -> 框架 -> 分布式
java·jvm·分布式
a努力。4 分钟前
小红书Java面试被问:如何设计一个分布式ID生成器
java·后端·面试
czlczl200209256 分钟前
Spring Security 进阶:基于 Customizer 的分布式权限配置架构设计
java·spring boot·分布式·后端·spring
lkbhua莱克瓦246 分钟前
面向编程3-UDP通信程序
java·网络·网络协议·udp
shepherd1267 分钟前
从入门到实践:玩转分布式链路追踪利器SkyWalking
java·分布式·后端·skywalking
Seven979 分钟前
剑指offer-54、字符流中第一个不重复的字符
java
武子康16 分钟前
Java-209 Spring AMQP 整合 RabbitMQ 实战:XML 配置直连交换机、RabbitAdmin 自动声明与收发闭环
xml·java·spring·rabbitmq·java-rabbitmq·java-activemq
崎岖Qiu1 小时前
【设计模式笔记19】:建造者模式
java·笔记·设计模式·建造者模式
SUPER52664 小时前
本地开发环境_spring-ai项目启动异常
java·人工智能·spring