2014-03-31 71 views
2

我寫了這個代碼在主:在Java錯誤創建新的對象

if (startAmount>0) //create new cashier object with or without a start amount 
    Cashier newCashier = new Cashier(startAmount); 
else Cashier newCashier = new Cashier(); 

,並得到一個編譯錯誤,第二行和第三行:

Multiple markers at this line 
    - Cashier cannot be resolved to a variable 
    - Syntax error on token "newCashier", delete 

和:

Multiple markers at this line 
    - Cashier cannot be resolved to a variable 
    - Syntax error, insert "AssignmentOperator Expression" to complete 
    Assignment 
    - Syntax error, insert ";" to complete Statement 

但是當我用括號寫下這樣的代碼時:

if (startAmount>0)//create new cashier object with or without a start amount 
{ 
    Cashier newCashier = new Cashier(startAmount); 
} 
else{ Cashier newCashier = new Cashier();} 

它似乎沒問題,沒有編譯錯誤。 有人可以幫我理解爲什麼嗎?

+0

哪個版本的Java和您使用的IDE? – GingerHead

+1

刪除作業,反正你不使用變量'newCashier'。 – Augusto

+0

版本:版本:Kepler Service Release 2 –

回答

3

爲什麼你newCachier參考創建影子變量, 你可能寧願做這個

Cashier newCashier = null; 
if (startAmount>0) //create new cashier object with or without a start amount 
    newCashier = new Cashier(startAmount); 
else 
    newCashier = new Cashier(); 
+0

你寫的和我寫的是什麼不同? 在兩種情況下都創建了一個對象嗎? –

+0

你是什麼意思「影子變數」?它將只創建一次依賴於if語句 –

+1

請在這裏找到http://en.wikipedia.org/wiki/Variable_shadowing – Javaboy

0

它總是最好添加這些大括號內。因爲在擴展代碼時你不會忘記添加它們,否則會導致奇怪的行爲。

我認爲你的第一個例外可能是因爲你忘了把你的else語句放在一個新行中,但我不確定。