基本介绍
代码块又称为初始化块,属于类中的成员,类似于方法,讲代码语句封装在方法体内,通过**{}**包围起来。
但和类中方法有不同,代码块没有方法名,没有参数列表,没有返回值,只有方法体,而且不用通过对象或类显式调用,而是加载类时,实例化对象时隐式调用。
基本语法
修饰符 {
代码语句
};
//修饰符要么不填 要么只能填static 分号可加可不加
//加上static就是静态代码块,不加的时候就是普通代码块
细节
静态代码块
- 静态代码块只能调用静态属性或静态方法
- 静态代码块,随着类的加载而被执行,并且只会执行一次
- 类何时被加载
- 创建类的实例化对象时 new
- 创建子类对象时,父类对象也会被加载,并且先执行父类的静态代码块
- 使用类的静态属性或静态方法时
普通代码块
- 实例代码块可以编写多个,也是遵循自.上而下的顺序依次执行
- 实例代码块在构造方法执行之前执行,构造方法执行依次,实例代码块对应执行一次。
- 普通代码块可以调用静态和非静态的属性和方法
- 普通代码块,在创建类的实例化对象时会被隐式调用,每创建一次就会调用一次,如果有继承关系,会先执行父类的普通代码块
- 如果只是使用类的静态属性或静态方法时,普通代码块并不会被执行。
在一个单类中的调用顺序
- 调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)
- 调用普通代码块和普通属性初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通变量初始化,则按他们定义的顺序调用)
- 调用构造方法
在有继承关系的类中的调用顺序
- 父类的静态代码块和静态属性(优先级一样,按定义的顺序执行)
- 子类的静态代码块和静态属性(优先级一样,按定义的顺序执行)
- 父类的普通代码块和普通属性初始化(优先级一样,按定义的顺序执行)
- 父类的构造方法
- 子类的普通代码块和普通属性初始化(优先级一样,按定义的顺序执行)
- 子类的构造方法