2014-01-06 54 views
2

嗨,我有以下代碼。當我使用實例變量,我得到如下輸出(默認值)java中的默認值

int value: 0 
float value: 0.0 
String value: null 
Static int value: 0 

但如果我嘗試聲明局部變量,並打印它給一個錯誤,該變量應該被初始化爲默認值。任何人都可以解釋我的理由嗎?

public class DefaultValues { 
    int a; 
    float b; 
    String c; 
    static int d; 
    public static void main(String[] args) {  
    int e;          // <---- 
    DefaultValues dv = new DefaultValues(); 
    System.out.println("int value: "+dv.a); 
    System.out.println("float value: "+dv.b); 
    System.out.println("String value: "+dv.c); 
    System.out.println("Static int value: "+d); 
    System.out.println("local int value: "+e); // <---- 
    } 
} 
+4

局部變量沒有默認值。它們必須在使用前初始化。 –

回答

2

只有實例變量,靜態(類)變量和數組組件被初始化爲默認值。

局部變量除非被初始化,否則不能使用,因爲它們沒有被賦予缺省值。

+2

_are arrays_你的意思是說別的嗎? –

+0

是**一個數組初始化器創建一個數組併爲其所有組件提供初始值**。 –

+0

哦,現在你明白了。謝謝! –

1

Java Language Specification 3.0, 4.12.5變量的初始值:

局部變量(§14.4,§14.14)必須被明確地給出的值 在使用之前,通過任一初始化(§14.4)或分配 (第15.26節),可以通過編譯器使用 規則進行明確分配(§16)來驗證。

1

我們可能有未初始化的局部變量,但編譯器將不允許使用,除非我們明確地初始化它們。這是Java語言規則。見JLS 4.12.5。變量http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html

•本地變量(§14.4,§14.14)的初始值必須被明確地給出的值 在使用之前,通過任一初始化(§14.4)或分配 (§15.26),在一種可以使用明確的 賦值(§16)規則驗證的方法。

1

對於類成員(變量)JVM將投入的默認值或默認值,將其初始化爲一個局部變量它使分配和訪問變量之前的初始值。

從文件:

它並不總是必要的,當某個字段聲明分配一個值。 已聲明但未初始化的字段將被編譯器設置爲 合理的默認值。一般來說,根據數據類型的不同,默認的 將爲零或爲空。然而,依靠這樣的 默認值,一般認爲編程風格不好 。

有關類成員默認值的更多信息,您可以檢查Primitive Data Types中不同數據類型的默認值。