概念
代码块和方法不同,没有方法名、返回值、参数,只有方法体。代码块在类加载时或创建对象时隐式调用。
基本语法
【修饰符】{ 代码 };
注意事项:修饰符可写可不写,可写时只能是static;
static修饰的是静态代码块,没有修饰的是普通代码块;
代码可以是任何逻辑语句;
结尾分号“ ; ”可以省略;
好处
1.相当于另一种形式的构造器,可做初始化操作。
2.如果多个构造器中都有重复语句,可以抽取到代码块里面,提高代码的复用性。
使用细节
1.static代码块也叫静态代码块,作用是对类进行初始化,随着类的加载而执行,只会执行一次。
普通代码块,每创建一次对象,就执行一次。
2.类加载的时机
(1)创建实例对象时
(2)创建子类对象实例,父类也会被加载
(3)使用类的静态成员时
3.普通代码块,在创建对象实例时,创建一次调用一次。
如果只是使用类的静态成员时,普通代码块并不会执行。
4.创建对象时,类的调用顺序
(1)调用静态代码和静态属性初始化
优先级一样,按出现顺序调用
(2)调用普通代码块和普通属性的初始化
优先级一样,按顺序调用
(3)调用构造方法
5.构造方法的最前面其实隐含了super()和调用本类普通代码块
class A{
public A{
//super();
//调用普通代码块
System.out.println("最后被调用")
}
}
6.创建子类时,调用情况
(1)父类的静态代码块和静态属性
(2)子类的静态代码块和静态属性
(3)父类的普通代码块和普通属性初始化
(4)父类的构造方法
(5)子类的普通代码块和普通属性初始化
(6)子类的构造方法
7.静态代码块只能直接调用静态成员,普通代码块可以调用任意成员