2013-04-23 207 views
0

我是一名Java初學者,努力瞭解以下變量初始化問題,希望能得到專家的幫助。Java變量值初始化

鑑於從考試代碼:

public class SimpleCalc { 
    public int value; 
    public void calculate() { value += 7; } 
} 

public class MultiCalc extends SimpleCalc { 
    public void calculate() { value -= 3; } 
    public void calculate(int multiplier) { 
     calculate(); 
     super.calculate(); 
     value *= multiplier; 
    } 
    public static void main (String[] args) { 
     MultiCalc calculator = new MultiCalc(); 
     calculator.calculate(2); 
     System.out.println(calculator.value); 
    } 
} 

我的理解是,這需要拋出一個運行時異常,因爲變量「值」永遠不會分配給實際的初始值它(public int value;)。但是,代碼的工作方式和行爲就好像變量「值」被賦值爲0(與public int value = 0;相同)。有人可以解釋爲什麼會發生這種情況?非常感謝

回答

8

。但是,代碼的工作原理和行爲就像變量「值」爲 分配0(與public int值= 0;相同)。

java中的實例變量獲取默認值。即int獲得0作爲默認值,float獲得0.0等等。因此如果你不初始化,他們會得到默認值。

Data Type Default Value (for fields) 
byte 0 
short 0 
int 0 
long 0L 
float 0.0f 
double 0.0d 
char '\u0000' 
String (or any object)  null 
boolean false 
+0

非常感謝您的解釋,非常感謝。 – 2013-04-23 08:58:34

+1

因爲你有其他常量鍵入我會寫'(字節)0'和'(短)0'順便說一句,彼爾姆將在Java 8中離開;;) – 2013-04-23 09:04:47

+1

@PeterLawrey基本上我從Oracle java軌跡複製表。 :) – PermGenError 2013-04-23 09:05:51

0

基本類型在Java中總是會被分配一個默認值。對於int這始終爲0

如果你使用一個Integer對象(而不是int),你會看到,如果它沒有被初始化拋出一個空指針異常。

0

這種初始化發生在java中的實例變量。變量'value'是存在於該類的每個對象中的實例變量。數據類型爲int的實例變量的默認值爲0。不同的數據類型(實例變量)具有不同的默認值。

Example

1

我的理解是,這需要拋出一個運行時異常,因爲變量「值」從來沒有得到分配給它的實際初始值(公共int值)。

未能初始化必須被初始化是由編譯器檢查和是一個編譯時錯誤的變量。

運行時錯誤在運行時拋出。即,當您運行已成功編譯的程序時。由於未能設置值而導致唯一的運行時錯誤是NullPointerException(用於訪問空引用),或者如果除以零的整數,很少出現ArithmeticException。

final字段和局部變量必須被初始化,但非最終字段將賦值它們的默認值。