代码块
1、介绍:代码块类似于方法,是类的成员之一。但和方法不同,代码块没有方法名、没有返回类型(void也不能写)、没有参数列表。根据是否被static修饰,可分为静态代码块和非静态代码块。
2、作用:可以理解为,代码块相当于另一种形式的构造器,或者可以说,代码块是对构造器的一种补充,可以实现对Java对象的初始化操作。
3、应用场景:如果多个构造器中都有重复的语句,可以抽取到代码块中,以提高代码的复用性。
4、几点注意事项:
1)类在什么情况下会被加载?
①创建对象实例的时候。
②创建子类对象实例的时候,父类和子类都会被加载。
③使用类的静态属性、静态方法的时候。
2)对于静态代码块,其作用是对类进行初始化,是随着类的加载而执行的,并且只执行一次(因为类只加载一次)。
3)如果只是使用类的静态成员,是不会执行非静态代码块的。
4)构造器的最前面实质上隐藏了 super( ) 和非静态代码块的调用。
5)没有继承关系时,创建一个对象的时候,在一个类中各个成员的调用顺序:
①调用静态代码块,静态属性初始化。(优先级一样,按照在类中定义的顺序依次执行)
②调用非静态代码块,非静态属性初始化。(优先级一样,按照在类中定义的顺序依次执行)
③调用构造器
6)存在继承关系时,创建一个对象的时候,父类和子类中各个成员的调用顺序:
①调用父类的静态代码块,父类的静态属性初始化。(优先级一样,按照在类中定义的顺序依次执行)
②调用子类的静态代码块,子类的静态属性初始化。(优先级一样,按照在类中定义的顺序依次执行)
③调用父类的非静态代码块,父类的非静态属性初始化。(优先级一样,按照在类中定义的顺序依次执行)
④调用父类的构造器
⑤调用子类的非静态代码块,子类的非静态属性初始化。(优先级一样,按照在类中定义的顺序依次执行)
⑥调用子类的构造器