欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于静态代码块,构造代码块,构造方法,普通代码块的一些概念和执行顺序

程序员文章站 2022-03-02 23:37:32
关于静态代码块,构造代码块,构造方法和普通代码块的执行顺序1.静态代码块:在类加载时执行,并且只执行一次,它的优先级高于其他任何代码块和构造函数。2.构造代码块:用于对象的初始化,在创建对象时调用,每次创建都会调用一次,在构造函数之前执行,它依托于构造函数,如果不实例化对象,构造代码块也不执行。3.构造函数:每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。4.普通代码块:存在于方法体中。new 一个对象的时候总是先执行构造代码,再...

关于静态代码块,构造代码块,构造方法和普通代码块的执行顺序

1.静态代码块:在类加载时执行,并且只执行一次,它的优先级高于其他任何代码块和构造函数。
2.构造代码块:用于对象的初始化,在创建对象时调用,每次创建都会调用一次,在构造函数之前执行,它依托于构造函数,如果不实例化对象,构造代码块也不执行。
3.构造函数:每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。
4.普通代码块:存在于方法体中。
new 一个对象的时候总是先执行构造代码,再执行构造函数,但是有一点需要注意构造代码不是在构造函数之前运行的,它是依托构造函数执行的。
综上,执行顺序为:
静态代码块>构造代码块>构造函数>普通代码块

请看如下代码:

public class C extends C0{
    public C(){
        super(100);
        System.out.print(1);
    }
    {
        System.out.print(2);
    }
    static{
        System.out.print(3);
    }
    public C(int age){
        this();
    }
    public static void main(String[] args) {
        new C(100);
        System.out.println();
        new C(120);
    }
}
class C0{
    public C0(){
        System.out.print(6);
    }
    public C0(int age){
        this();
        System.out.print(7);
    }
    static{
        System.out.print(5);
    }
    {
        System.out.print(4);
    }
}

其执行结果为:5346721 46721

反编译代码为:
C0.class:

class C0 {
    public C0() {
        System.out.print(4);
        System.out.print(6);
    }

    public C0(int age) {
        this();
        System.out.print(7);
    }

    static {
        System.out.print(5);
    }
}

C.class:

public class C extends C0 {
    public C() {
        super(100);
        System.out.print(2);
        System.out.print(1);
    }

    public C(int age) {
        this();
    }

    public static void main(String[] args) {
        new C(100);
        System.out.println();
        new C(120);
    }

    static {
        System.out.print(3);
    }
}

在第一次new对象时,静态代码块执行,并且只执行了一次,在第二次new对象时,静态代码块没有执行,而构造代码块在每次创建对象时都会执行。通过反编译的代码可以看出构造代码块在初始化对象时被调用,并且在无参构造之前执行。

本文地址:https://blog.csdn.net/m0_50857829/article/details/109820124

相关标签: 笔记 java