代码块
如果成员变量想要初始化的值不是一个硬编码的常量值,而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值,该怎么办呢?此时,可以考虑代码块(或初始化块)。
代码块(或初始化块)的作用:
- 对Java类或对象进行初始化
代码块(或初始化块)的分类:
- 一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块(static block)
- 没有使用static修饰的,为非静态代码块。
静态代码块
语法格式:
代码语言:javascript复制【修饰符】 class 类{
static{
静态代码块
}
}
非静态代码块
语法格式:
代码语言:javascript复制【修饰符】 class 类{
{
非静态代码块
}
【修饰符】 构造器名(){
// 实例初始化代码
}
【修饰符】 构造器名(参数列表){
// 实例初始化代码
}
}
静态代码块 VS 非静态代码块
相同点:
- 可以有输出语句。
- 可以对类的属性、类的声明进行初始化操作。
- 代码块的执行优先于构造器,因而可以在代码块中进行初始化操作,在构造器中调用。
- 若有多个代码块,按声明顺序执行
不同点:
- 静态代码块:
- 静态代码块随着类的加载而加载,且只执行一次。
- 静态代码块的执行要先于非静态代码块。
- 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。
- 非静态代码块:
- 每次创建对象的时候,都会执行一次。
- 除了调用非静态的结构外,还可以调用静态的变量或方法。