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

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

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. 构造函数在非静态代码块之后执行,同样先父类后子类
相关推荐
鬼先生_sir2 分钟前
Spring AI Alibaba 用户使用手册
java·人工智能·springai
有梦想的小何2 分钟前
从0到1搭建可靠消息链路:RocketMQ重试 + Redis幂等实战
java·redis·bootstrap·rocketmq
大数据新鸟6 分钟前
HashMap、Hashtable、ConcurrentHashMap 核心对比
java
MX_935919 分钟前
Spring MVC拦截器
java·后端·spring·mvc
橘子编程23 分钟前
MindOS:你的AI第二大脑知识库
java·开发语言·人工智能·计算机网络·ai
XWalnut26 分钟前
LeetCode刷题 day9
java·算法·leetcode
忧郁的Mr.Li27 分钟前
JAVA工具类---PDF电子签章工具类
java·pdf
零二年的冬34 分钟前
epoll详解
java·linux·开发语言·c++·链表
凭君语未可41 分钟前
Java 中的接口是什么
java·开发语言
XiYang-DING42 分钟前
【Java】二叉树
java·开发语言·数据结构