學習自
變量的默認值
只有成員變量才有默認值,而局部變量必須要賦初值,為什么非怎么設置?下面我們來看一下。
類型 | 值 |
---|---|
Int | 0 |
Long | 0 |
Boolean | false |
float | 0.0 |
double | 0.0 |
char | /u000(NULL) |
String | NULL |
Object | NULL |
數組(未初始化) | NULL |
數組(初始化) | 數組各個元素的值,其類型的默認值 |
然后我們通過一個程序來檢測一下:
public static class Measurement {
int i;
long l;
boolean b;
float f;
double d;
char c;
String s;
Object o;
int[] ints;
public void printAll() {
System.out.println("Java 各個數據類型的初始值如下:\n" +
"Int:" + i + "\n" +
"Long:" + l + "\n" +
"Boolean:" + b + "\n" +
"Float:" + f + "\n" +
"Double:" + d + "\n" +
"Char:" + c + "\n" +
"String:" + s + "\n" +
"Object:" + o + "\n" +
"Array:" + ints + "\n");
}
}
我們看一下這個程序運行之后的結果,
Java 各個數據類型的初始值如下:
Int:0
Long:0
Boolean:false
Float:0.0
Double:0.0
Char:
String:null
Object:null
Array:null
為什么有默認值
這是一個好問題!?因為有些成員變量在初始化的時候不知道賦什么初始值,所以為了解決這個問題,Java 直接給沒有顯示初始化的成員變量賦一個初始值。
初始值賦值的過程
成員變量賦默認值的過程是依照從上到下的循序來的,這一個,我們通過IDE來進行一下證實。
public static class Circle{
double r;
double area=3.14*r*r;
}
我們可以發現,我們的這部分代碼可以正常編譯和運行。
然后我們在嘗試一下下面的代碼:
public class Circle {
double area = 3.14 * r * r;
double r;
}
這樣我們會發現一個問題,我們的編譯器是無法正常編譯的,編譯器會出現向前引用的問題。
這樣我們就可以得到我們的賦值過程是從上到下的。
局部變量也需要顯示初始化
上面我們提到了成員變量的默認值,那為什么在方法中的布局要顯示的初始化呢?我想我們都寫過這樣的代碼:
public static void test(){
int i;
i++;
}
如果你是這樣寫的代碼,那么我們的編譯器一定會出錯。所以我們的得出一個結論,我們所有的局部變量必須要有初始化值。因為可以這種手段來避免很多無畏的錯誤。