1. 對於類的成員變量,不管程序有沒有顯式的進行初始化,Java虛擬機都會先自動給它初始化為默認值。
默認值如下:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
2. 局部變量聲明之后,Java虛擬機就不會自動給它初始化為默認值,因此局部變量的使用必須先經過顯式的初始化。
但是需要聲明的是:對於只負責接收一個表達式的值的局部變量可以不初始化,參與運算和直接輸出等其它情況的局部變量需要初始化。
通過下面這個測試可以看到JVM對哪些數據初始化,哪寫數據不初始化:
public class TestStatic {
static int x; //類的成員變量,JVM負責初始化
static int method()
{
int y=0; //此處必須自己初始化,它不屬於類成員變量,是個method的局部變量,JVM不負責初始化
return y;
}
public static void main(String[] args) {
TestStatic as=new TestStatic();
int z=0; //此處必須自己初始化,它不屬於類成員變量,是個主函數里的局部變量,JVM不負責初始化
int aa=3; //此處aa參與了運算,所以必須初始化
aa=aa+2;
int a=1,b=2,max; //max只是負責接收表達式的值,不需要初始化
max=a>b?2:1;
System.out.println(max); //1
System.out.println(aa); //5
System.out.println("z="+z); //z=0
System.out.println("x="+as.x); //x=0
System.out.println("y="+as.method()); //y=0
}
}
總結為一句話便是:
類里定義的數據成員稱為屬性,屬性可不賦初值,若不賦初值則JAVA會按上表為其添加默認值;方法里定義的數據成員稱為變量,變量在參與運算之前必須賦初值。