初始化块用来给变量赋值,那为什么不直接用=赋值语句来完成?为什么要单独划分出来初始化块?或者初始化块还有其他用处?
非静态初始化块:
作用:给对象进行初始化。对象一建立就运行,且优先于构造函数的运行。
非静态初始化块:
作用:给对象进行初始化。对象一建立就运行,且优先于构造函数的运行。
与构造函数的区别:非静态初始化块给所有对象进行统一初始化,构造函数只给对应对象初始化。
应用:将所有构造函数共性的东西定义在构造代码块中。
静态初始化块:
作用:给类进行初始化。随着类的加载而执行,且只执行一次
与构造代码块的区别:
1)构造代码块用于初始化对象,每创建一个对象就会被执行一次;静态代码块用于初始化类,随着类的加载而执行,不管创建几个对象,都只执行一次。
2)静态代码块优先于构造代码块的执行
3)都定义在类中,一个带static关键字,一个不带static
构造函数、非静态初始化块、静态代码块都是用于初始化的,三者的执行顺序依次是:静态代码块>构造代码块>构造函数。
总的来说,初始化块相当于构造方法的无参构造,适用于给所有对象统一赋初值,而构造方法(带参)可以给不同的对象赋不同的值,静态初始化块只在类加载使执行一次,只能给静态变量赋初值,当不同的对象需要使用一个统一值的时候可以采用静态变量和静态初始化。