Java初始化块

1.初始化块
初始化块根据是否使用static修饰分为两类:
(1)不使用static修饰的是初始化块
(2)使用static修饰的是静态初始化块
•初始化块
◦初始化块相当于是对构造器的补充,用于创建对象时给对象的初始化,在构造器之前执行
◦如果一段初始化代码对所有构造器完全相同,且无需接收参数,那就可以将其提取到非静态初始化代码块中
◦实际上,经过编译后,非静态块已经添加到构造器中,且位于所有构造器代码的前面
•静态初始化块
◦静态初始化块用static修饰,又叫类初始化块
◦静态初始化块负责对类进行初始化,因此类初始化块是在类初始化阶段就执行
◦静态块跟静态方法一样,不能访问非静态成员
◦因为静态块是在类的初始化阶段完成的,因此在创建某个类的第二个对象时,该类的静态块就不会执行了

一、单个类中初始化块、静态初始化块、构造器的执行顺序
•在单个类中,静态初始化块(多个时从上往下执行),初始化块(多个时从上往下执行),构造器

class ClassDemo1{
2.    public ClassDemo1() {
3.        System.out.println("ClassDemo1构造器");
4.    }
5.
6.    {
7.        System.out.println("ClassDemo1 初始化块1");
8.    }
9.    {
10.        System.out.println("ClassDemo1 初始化块2");
11.    }
12.    {
13.        System.out.println("ClassDemo1 初始化块3");
14.    }
15.
16.    static {
17.        System.out.println("ClassDemo1 静态初始化块1");
18.    }
19.
20.    static {
21.        System.out.println("ClassDemo1 静态初始化块2");
22.    }
23.}
24.
25.public class Demo1 {
26.    public static void main(String[] args) {
27.        ClassDemo1 cDemo1=new ClassDemo1();
28.    }
29.}

二、多个类的继承中初始化块、静态初始化块、构造器的执行顺序
•在继承中,先后执行父类A的静态块,父类B的静态块,最后子类的静态块,然后再执行父类A的非静态块和构造器,然后是B类的非静态块和构造器,最后执行子类的非静态块和构造器
(1)父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3) 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类的构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类的构造方法。

//----BaseOne.java
2.public class BaseOne {
3.    static {
4.        System.out.println("BaseOne静态初始化块");
5.    }
6.
7.    {
8.        System.out.println("BaseOne初始化块");
9.    }
10.
11.    public BaseOne(){
12.        System.out.println("BaseOne构造器");
13.    }
14.}
15.
16.//----BaseTwo.java
17.public class BaseTwo extends BaseOne {
18.    static {
19.        System.out.println("BaseTwo静态初始化块");
20.    }
21.
22.    {
23.        System.out.println("BaseTwo初始化块");
24.    }
25.
26.    public BaseTwo(){
27.        System.out.println("BaseTwo构造器");
28.    }
29.}
30.
31.//---- BaseThree.java
32.public class BaseThree extends BaseTwo {
33.    static {
34.        System.out.println("BaseThree静态初始化块");
35.    }
36.
37.    {
38.        System.out.println("BaseThree初始化块");
39.    }
40.
41.    public BaseThree(){
42.        System.out.println("BaseThree构造器");
43.    }
44.}
45.
46.//----Demo2.java
47.public class Demo2 {
48.    public static void main(String[] args) {
49.        BaseThree baseThree=new BaseThree();
50.        System.out.println("-->第二次创建BaseThree对象<--");
51.        BaseThree baseThree2=new BaseThree();
52.    }
53.}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值