每天开心一点

Java中的初始化代码块

2019-11-21 11:44:00    六月    690    来源: https://blog.csdn.net/blue_space/article/details/81740441

初始化块是java类中可以出现的第四种成员(前面包括属性、方法、构造器)。

一个类中可以有多个初始化块,相同类型的初始化块按顺序执行。初始化块要么不写修饰符,要么用static修饰,用static修饰的叫静态代码块。代码块里可以包括任何可执行语句。

普通初始化块、声明实例属性值都可以被认为是对象的初始化代码。初始化块在创建对象时隐式地执行,在构造器之前执行。与构造器类似的是,系统会一直上溯到Object类,先执行他的初始化块,再执行构造器,知道当前对象。

使用static修饰的代码块称为静态代码块,也成为类初始化块。它与类相关,系统在类初始化时执行,而不是在创建对象时执行。与初始化块先相似的是,类初始化时也会上溯到Object类,执行它的静态代码块,直到自身。只有类初始化完成之后,才可以在系统中使用这个类,包括方法访问、属性访问、创建实例。

在java中用{}括起来的称为代码块,代码块可分为以下四种:

1.普通代码块:

类中方法的方法体

2.构造代码块

构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。

3.静态代码块:

用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。

4.同步代码块:

使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。

Java程序初始化的顺序: 父类静态变量>父类静态代码块>子类静态变量>子类静态代码块>父类非静态变量>父类非静态代码块>父类构造器>子类非静态变量>子类非静态代码块>子类构造器。

参考: https://www.jb51.net/article/129990.htm 

    j ava 对象的初始化流程(静态成员、静态代码块、普通代码块、构造方法)

    https://www.jianshu.com/p/0870b02f0266