2014-03-31 62 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语句放在一个新行中,但我不确定。