1、成员初始化
java尽力保证,所有的变量在使用前都能得到恰当的初始化
- 对于方法中的局部变量,Java为了贯彻这种思想,会对所有未给出默认值的局部变量予以编译错误的提示
- 对于类中的成员变量,Java会自动为没有做初始化的基本类型数据变量赋予一个默认值,默认值参见下表
boolean | false |
char | [] |
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0 |
double | 0.0 |
reference | null |
2、构造器初始化
可以用构造器来进行初始化,在运行时刻,可以调用方法或者执行某些动作来确定初始值,但是!
无法阻止自动初始化的进行,他将在构造器被调用之前发生。
换句话说,就是一个类内部的成员变量在调用构造器对其进行初始化的时候,成员变量已经提前被执行了初始化的动作。
2.1 初始化的顺序
在类的内部,变量定义的先后顺序决定了初始化的顺序。
这句话的意思是,一个对象中可能包含许多成员变量,构造器 ,方法等;无论如何最先执行初始化的一定是成员变量。
2.2 静态数据初始化
无论创建多少个对象,静态数据都只占一份存储区域。这就有点像一根树枝上长了许多花,你可以说花拥有树枝,但是的确只有一根树枝。。强行解释
下面说初始化的问题,
- 如果一个静态基本类型域没有对它初始化,他将会获得基本类型的标准初始值。
- 如果他是一个引用对象,会得到一个null初始值。
2.3 数组初始化
类似 int[] a; 和 int a[]; 并没有这样的写法:int[100] a;
编译器 不允许 指定数组的大小,因此并没有为数组本身分配任何空间。得到的只是一个引用而已
为了给数组进行空间的分配,必须要执行初始化,初始化的方式 是 :int[] a ={1,2,3,4,5}; 或 int[] a = new int[20];
- 基本数据类型数组一旦初始化,数组内的元素类型会自动初始化为基本类型的初始值
- 引用数据类型数组一旦初始化,它还是个引用数组,只有引用的东西被new出来,才算初始化完毕。
所有的数组都有一个固有成员,可以通过它获知数组包含多少元素,这个就是length