对象的初始化和清理是非常重要也是非常麻烦的事情,本文主要整理一些Java中与初始化相关的规则。
1 自动初始化:类中的成员变量即使没有被赋值,编译器也会给它们一个默认值进行初始化。
DataType InitialValue
boolean false
char []
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
reference null
前面是Java中基本数据类型的默认值,最后一行是当成员变量是对象引用时的默认值。
然而,对于方法中的局部变量,编译器并不会为它赋予默认值。因此要求使用前必须赋值。
int i;
System.out.println(i); //Error,not initialize
2 指定初始化:定义类成员变量时赋值。
private char c='a'; //OK
private int i=f(); //OK
public int f(){retuan 10;}
这种初始化简单直观,带来的效果是同一个类的所有对象的初始值都是一样的。
3 用构造器完成初始化:使用构造器进行初始化能带来更大的灵活性,使得初始值可以在动态运行中获得。构造器总能确保初始化。创建对象的时候势必会调用构造器,因此我们在使用对象前一定完成了所有初始化工作。但第一点提到的自动初始化仍然奏效。
private int i;
public A(){i=10;} //i会被先赋值为0,再被赋值为10
成员变量定义的顺序决定了初始化的顺序,但所有成员变量都会在构造器之前完成初始化。
private int i; //第一个被初始化
public A(){
k=9; //最后
}
private int j=2; //第二个
private int k=3; //第三个
成员变量有静态的时候,初始化顺序如下:
private int i; //第三个
private static int j; //第一个被初始化
public A(){ int k=10;} //最后
private static char c='c'; //第二个
对于static的成员变量时,只在第一次进行初始化,后面无论再创建多少个对象,都不会第二次初始化。