初始化块
-
功能
实现和构造器一样的功能,对 对象进行初始化操作。
初始化块 相当于一种成员,一个类里可以有多种初始化块,语法格式如下:
修饰符
{
//初始化的可执行代码...
}
初始化的修饰符只有static关键字,写上static修饰符的初始化块被称为类初始化块(静态初始化块),没有static修饰的初始化块被称为实例初始化块(非静态初始化块)。初始化块里的代码可以包含任何可执行性语句,包括定义局部变量、调用其他对象的方法,以及使用分支,循环语句等。
package day6;
public class Person
{
{
int a=6;
if(a>4)
System.out.println("Person实例初始化块:局部变量a的值大于4");
System.out.println("Person的实例初始化");
}
{
System.out.println("Person的第二个实例化初始块");
}
public Person()
{
System.out.println("Person类的无参数构造器");
}
public static void main(String [] args)
{
new Person();
}
}
运行结果:Person实例初始化块:局部变量a的值大于4
Person的实例初始化
Person的第二个实例化初始块
Person类的无参数构造器
从运行结果可以看出,当创建Java对象时,系统总是先调用该类里定义的实例初始化块,如果一个类里定义了2个实例化初始化块,则前面定义的初始化块总是先执行,后面定义的实例初始化块后执行。
初始化块虽然也是Java的一种成员,但他没有名字,也就没有标识,因此无法通过类、对象来调用初始化块。实例初始化块只在创建Java对象时隐式执行,而且在构造器执行之前自动执行,类初始化则在类初始化阶段自动执行。
-
初始化块&&&构造器
package day6; public class InstanceInitTest { { a=6; } int a=9; public static void main(String[] args) { System.out.println(new InstanceInitTest().a); } }
这里输出的结果是9,说明int a=9;语句在初始化块执行之后
实例初始化块总是在构造器执行之前执行。
-
实例初始化和构造器
实例初始化对于无参数的初始化较为方便,可以将无参数的都写进实例初始化块里,而有参数的写进构造器里,提高整个程序的可维护性。
-
类初始化块
标志:使用了static修饰符
类初始化块负责对类进行初始化,而不是在创建对象时才执行。
类初始化总是比实例初始化先执行。
类初始化块是类相关的,用于对整个类进行初始化处理,通常用于对类变量执行初始化处理。类初始化块不能对实例变量进行处理。