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

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

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. 构造函数在非静态代码块之后执行,同样先父类后子类
相关推荐
古法安卓5 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding6 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng7 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛9 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko9 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户31268748772012 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang12 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing13 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活13 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
lhldsg14 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售