清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java 基础

    • 简介
    • 第一个 Java 代码
    • 数据类型
    • 变量
    • 进制
    • 导包
    • 输入
    • 数据类型转换
    • 运算符
    • 随机数
    • 流程控制
    • 访问修饰符
    • 面向对象
    • 重载与重写
    • 程序执行流程
    • 方法参数的值传递
    • 多线程
    • Java 常用类
    • 枚举
    • 注解 Annotation
    • 集合
    • 泛型
    • IO
    • 网络编程
    • 反射
    • lambda
    • 类加载
    • 正则表达式
    • 字符集

程序执行流程

在产生对象实例前,经历了哪些流程?

Person per = new Person()

以上代码执行前,会先加载父类的构造方法,然后再执行自身的构造方法。

public class B {

    public B() {
        
    }
    
    static {
        System.out.println("静态代码");
    }
    
    public static void main(String[] args) {
        new B();
        new B();
        new B();
    }
}

上面的代码中,会先执行静态代码块,且只会执行一次。

public class B  {

    public B() {
        
    }
    
    // 普通代码块
    {
        System.out.println("普通代码");
    }
    
    public static void main(String[] args) {
        new B();
        new B();
        new B();
    }
}

上面的代码中,会先执行普通代码块,且每创建一个实例就会执行一次。

public class B extends A {

    public B() {
        
    }
    
    // 普通代码块
    {
        System.out.println("普通代码");
    }

    // 静态代码块
    static {
        System.out.println("静态代码");
    }

    public static void main(String[] args) {
        new B();
    }
}

上面代码的执行顺序:

父类静态代码块 -> 子类静态代码块 -> 父类普通代码块 -> 父类构造方法 -> 子类普通代码块 -> 子类构造方法

想要编辑此页?
上次更新: 2023/3/18 19:48
贡献者: djf
←重载与重写方法参数的值传递→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号