java中的初始化有几种方式,其中包括声明时对数据成员初始化,构造函数初始化和初始化块;初始化块也分为静态初始化快和实例初始化块,静态初始化块由static关键字引导的用花括号括起来的语句块,它位于类的类体中,但不能在任何方法体中,静态初始化块在中的语句和声明静态变量时指定初值的初始化动作会按照在类中的定义顺序来执行,且只有在第一次加载类文件的时候进行初始化,其他情况不会进行初始化,而实例初始化块不能有static,而且不应该在实例初始化块中对静态变量进行初始化。一般来说,初始化块应该放在全部数据成员后面,否则,在该初始化块中这个数据成员除了能用作做操作数被赋值外,不能用作其他用途.例如:
class Person
{
int age;
{
age=10;
age=num;//正确,可以读取其后声明的变量
weight=30;//正确,可以给其后的声明的变量赋值
weight++;//错误,不能进行读取变量
}
int weight;
static int num=20;
}
一般来说,在不考虑继承和使用关键字this在一个构造方法中调用其所属类的另一个构造方法的前提下,类中的数据成员的初始化过程如下:
1,首次使用某个类(创建该类的对象或者访问该类的静态成员)时,Java系统查找相应的类文件并加载;
2,在载入类文件的同时系统首先会对该类的静态成员变量和静态初始化块分配存储空间并将它们初始化默认值,然后按声明静态变量时指定初值的初始化和静态初始化块中的语句在类中定义出现的顺序执行它们。这些初始化动作只会在其所属类的首次加载时执行一次。
3,类文件加载完毕后,如果是创建类,继续执行下列初始化动作。
4,系统首先为所有实例变量分配足够的存储空间并将它们初始化为默认值。
5,调用相关的构造方法,在执行构造方法中的语句前,首先按声明实例变量时指定的初值的初始化动作和实力初始化块中的语句在类定义中出现的顺序依次执行它们。
6,执行构造函数中的语句。