(java基础学习)代码块
(java基础学习)代码块
代码块
1.代码块(初始化块):属于类的一个成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来,
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通对象会类显式调用,而是加载类时,或创建对象时隐式调用。
2.基本语法
【修饰符】{
代码
};
注:(1)修饰符 可选,要写的话,也只能写static
(2)代码块分为两类,有static修饰的叫静态代码块,没有的叫普通代码块。
(3)逻辑语句可以为任何逻辑语句(和方法一样)
(4);号可以写上,也可以省略。
3.作用
(1)相当于对构造器的补充机制
(2)使用场景:如果多个构造器中有重复的语句,可以抽取到代码块中,提高代码复用性。
(3)快速入门
1 |
|
4.代码块使用细节
(1)static代码块也叫静态代码块,作用就是对类进行初始化,而且它随类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。
(2)类什么时候被加载
1.创建对象实例时(new)
2.创建子类对象实例,父类也会被加载
3.使用类的静态成员时(静态属性,静态方法)
(3)普通代码块,在创建对象实例时,会被隐式的调用。
创建一次就调用一次。如果使用类的静态成员时,普通代码块不会被执行。
小结:1.static代码块是类加载时,执行,只会执行一次。
2.普通代码块是在创建对象时调用的,创建一次就调用一次。
3.类加载的3种情况要背
5.创建一个对象的时候,在一个类 调用顺序是:(重点)
(1)调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用优先级是一样的,按他们的定义的顺序调用)
(2)调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化优先级一样,按定义顺序调用)
(3)调用构造方法
6.构造器的最前面其实隐含了super()和调用普通代码块。
例如
1 |
|
7.创建一个子类对象时(继承关系),他们的静态代码块。静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下。(面试题)
(1)父类的静态代码块和静态属性(优先级一样,按定义顺序)
(2)子类的静态代码块和静态属性(优先级一样,按定义顺序)
(3)父类的普通代码块和普通属性初始化(优先级一样,按定义顺序)
(4)父类的构造器
(5)子类的普通代码块和普通属性初始化(优先级一样,按定义顺序)
(6)子类的构造器
例子中:
//1.类加载
//(1)类加载 先加载父类AAAA,再加载子类BBBB
//(2)创建对象 子类构造器开始
//
8.静态代码块只能调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!