静态代码块、构造代码块、构造方法的执行顺序


构造代码块、静态代码块与构造方法是三种不同的代码块,那么他们到底有什么区别呢?

一、简单认识一下构造代码块、静态代码块与构造方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
classA
{
    //构造代码块
    {
        System.out.println("构造代码块A");
    }
 
    //静态代码块
    static
    {
        System.out.println("静态代码块A");
    }
     
    //构造方法
    publicA()
    {
        System.out.println("构造方法A");
    }
}

二、弄清三者的执行顺序

1
2
3
4
5
6
7
classDemo
{
    publicstaticvoidmain(String[] args)
    {
        newA();
    }
}

三、在构造多个对象时顺序又会是怎样呢

1
2
3
4
5
6
7
8
9
classDemo
{
    publicstaticvoidmain(String[] args)
    {
        newA();
        newA();
        newA();
    }
}

四、看看在继承体系中又会是怎样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
classBextendsA
{
    //构造代码块
    {
        System.out.println("构造代码块B");
    }
 
    //静态代码块
    static
    {
        System.out.println("静态代码块B");
    }
     
    //构造方法
    publicB()
    {
        System.out.println("构造方法B");
    }
}
1
2
3
4
5
6
7
classDemo
{
    publicstaticvoidmain(String[] args)
    {
        newB();
    }
}


五、总结一下

    1、在创建一个对象的过程中,三者的执行顺序是:静态代码块  -->  构造代码块  -->  构造方法;

    2、每创建一个对象,构造代码块和构造方法就会执行一次;而不管创建多少个对象,静态代码块仅仅执行一次;

    3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;

    4、创建子类对象时,子类的构造代码块在父类的构造方法后执行。



原文出处:/show_1C7iZyuFKk3.html