美文网首页
Java的初始化顺序

Java的初始化顺序

作者: 慌张而黑糖 | 来源:发表于2019-10-20 17:32 被阅读0次

这里主要介绍静态代码块(static initialization block)、非静态代码块(initialization block)和构造函数(constrouctor)。

当他们在同一个类中同时出现时(不包含继承的情况),初始化的顺序为:

静态代码块>非静态代码块>构造函数

举个例子:

public class A {
    private String name;
    {
        System.out.println("A的非静态代码块");
    }
    static {
        System.out.println("A的静态代码块");
    }
    A(){
        System.out.println("A的构造函数");
    }
    A(String name){
        this.name = name;
        System.out.println("A的有参构造函数,name ="+this.name);
    }
    public static void main(String[] args) {
        new A();
        new A("lili");
    }
}

结果为:

A的静态代码块
A的非静态代码块
A的构造函数
A的非静态代码块
A的有参构造函数,name =lili

并且上面我故意将非静态代码块放到静态代码块之前,但是依然不能改变静态代码块先执行的结果。其中静态代码块在程序运行时只执行一次。

当出现继承情况时

public class B extends A{
    {
        System.out.println("B的非静态代码块");
    }
    static {
        System.out.println("B的静态代码块");
    }
    B(){
        System.out.println("B的构造函数");
    }
    public static void main(String[] args) {
        new B();
    }
}

这里B继承的是上面的A,其结果为:

A的静态代码块
B的静态代码块
A的非静态代码块
A的构造函数
B的非静态代码块
B的构造函数

  • 可以看出静态代码块是第一个执行的,当父类也含有静态代码块时,先执行父类的静态代码块。
  • 除去静态代码块,构造函数和非静态代码块都是递归调用执行。

相关文章

  • Java初始化顺序

    layout: post title: Java初始化顺序 categories: JAVA descriptio...

  • Kotlin笔记

    Kotlin与Java的差异 1. 对象的初始化时的顺序 在java中,初始化代码块 -> 构造函数 在kotli...

  • Java初始化顺序

    Java初始化的顺序如下: 静态变量和静态初始化块之间没有先后关系, 遵循代码的先后顺序, 写在前面就先初始化, ...

  • 类初始化和加载过程

    一、对象的初始化顺序: java类加载器加载类的顺序:http://blog.csdn.net/crazycode...

  • 构造器内部的多态方法的行为

    上一篇 :Java类初始化顺序 上一节我们简单总结了类的初始化顺序。父类(静态变量、静态初始化块)>子类(静态变量...

  • Java程序初始化顺序

    Java程序初始化顺序 首先来看一段代码 输出顺序应该是什么样的呢? 根据上图可知:在程序初始化时,先会初始化父类...

  • 设计模式——工厂,策略,建造者

    Java 类初始化顺序基本分为以下几种:静态块,初始化块,静态方法,构造函数块,静态变量,成员变量对于块顺序,静态...

  • Java初始化顺序

    1. 类的内部: [ddd](dddddddddddddd) 静态变量(如果加载该类的class文件,加载时即初...

  • Java初始化顺序

    Java初始化顺序:①类变量、类方法>②(父类代码)>③实例变量>④构造器当一个类要实例化时,static变量和方...

  • Java初始化顺序

    1 无继承情况下的Java初始化顺序: 输出结果为: 由此可以得出结论: a静态成员变量首先初始化(注意,Stat...

网友评论

      本文标题:Java的初始化顺序

      本文链接:https://www.haomeiwen.com/subject/cblamctx.html