Java變量的默認值和初始化


學習自

變量的默認值

只有成員變量才有默認值,而局部變量必須要賦初值,為什么非怎么設置?下面我們來看一下。

類型
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++;
}

如果你是這樣寫的代碼,那么我們的編譯器一定會出錯。所以我們的得出一個結論,我們所有的局部變量必須要有初始化值。因為可以這種手段來避免很多無畏的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM