2013-10-18 104 views
5

請參閱下面的代碼。方法printTest()打印未初始化變量的默認值,但是當涉及到主方法時,java正在請求變量初始化。有人可以解釋爲什麼嗎?爲什麼java在本地時要求初始化變量

public class Test1 { 

    public static void main(String[] args) { 
     int j; 
     String t; 

     System.out.println(j); 
     System.out.println(t); 
    } 
    } 


    public class Test2 { 

    int i; 
    String test; 

    public static void main(String[] args) { 
    new Test().printTest(); 
    } 

    void printTest() { 
    System.out.println(i); 
    System.out.println(test); 
    } 

    } 
+2

在java中,你需要在使用它們之前初始化變量 –

+2

是的,我同意。請參閱代碼和我的問題 –

+0

你期望發生什麼? –

回答

11

局部變量主要用於中間計算,而實例變量應該帶有用於未來和中間計算的數據。 Java並沒有強制初始化實例變量,並允許默認值,但對於開發人員調用的本地變量來說,該值賦予了該值。所以爲了避免錯誤,你需要初始化局部變量。

+0

終於有了真正的答案xD – RamonBoza

+0

感謝Vineet,也感謝RamoBoza –

0

您必須在java中初始化局部變量。就那麼簡單。如果您沒有值,可以將該值設置爲null。注意:int是一個簡單的數據類型,不能有null值,因此我將該類更改爲「Integer」,它是無論如何都會圍繞int的類。

public class Test { 

    int i; 
    String test; 

    public static void main(String[] args) { 
     Integer j = null; 
     String t = null; 
     //other options for initialization value: 
     t = new String(); 
     t = ""; 

     System.out.println(j); 
     System.out.println(t); 

     new Test().printTest(); 
    } 

    void printTest() { 
     System.out.println(i); 
     System.out.println(test); 
    } 
} 
1

Java documentation for primitives

局部變量是略有不同;編譯器從不將默認值分配給未初始化的局部變量。如果你不能初始化聲明它的局部變量,確保在你嘗試使用它之前給它賦值。訪問未初始化的本地變量將導致編譯時錯誤。

+0

你不是指運行時錯誤嗎? –

2

這是編譯器可以知道的問題。

在主方法的情況下,編譯器確定知道變量沒有被初始化。

但是在printTest方法的情況下,編譯器確實知道可能是用於初始化類變量的其他方法(或相同的包類)。

0

我想,局部變量不會作爲JVM類加載的一部分加載到內存中,因此沒有爲這些變量分配默認值。由於基元沒有「空」概念,因此應該明確地爲本地變量賦值。

開放討論!

2

您的全局變量未在任何地方初始化。您正嘗試打印var i並使用未顯示/存在的值進行測試。它不爲null或0,也不爲空。

你的情況有點類似,這(從答案:Uninitialized int vs Integer

i == 0; Uninitialized 
i == null; Undefined 
test == 0; java.lang.NullPointerException 
test == null; Uninitialized 

,但是當它涉及到的主要方法Java是要求變量初始化。

你的本地變量是我和t類似於全局變量的情況。

變量需要初始化。我個人認爲任何帶有變量的計算都需要有初始值,否則將不存在。

計算機目前基於計算/數學的物理使用,因此無論數學中的哪些規則,它也將應用於計算機,除非我們已經進入計算量子或更進一步的新階段。

在數學中,變量是指定了可以在給定的問題的範圍內的修改或設置操作的值的符號(通常是字母字符)。

(來源:http://en.wikipedia.org/wiki/Variable_(mathematics)

所以該規則給出的,沒有任何價值,我的變量是不存在的空= X是空的,並計算空虛,因爲沒有人能看到它沒有已知的方法。

+0

不錯的嘗試。所以我給你一個投票 –

+0

非常感謝Ashokkuttuva! – RGAT

0

在你的程序中,你的變量需要攜帶一些值,因爲你在if-else循環中使用了變量,而且我可以看到如果程序轉到其他循環,沒有什麼可以顯示爲'sizeDisplay',這就是爲什麼你的sizeDisplay需要初始化爲「null」。

相關問題