下面的代碼不會編譯,因爲編譯器不能保證數據字段f
將被初始化。你如何解決這個問題?如何初始化循環內的數據字段?
import java.util.Scanner;
public class Foo
{
private final int f;
/*constructor*/
public Foo()
{
Scanner sc = new Scanner(System.in);
for(int i = 0; i < 10; i++)
{
if(i == 5)
f = sc.nextInt();//error: variable f might be assigned in a loop
}
}
public Foo(int i)
{
j = i;//no problem
}
}
是不是這種在語言毛刺的,因爲我在其他的構造,我可以有f
設置爲final
,只是因爲它不是在一個循環中完成它的工作原理。我知道編譯器(愚蠢)看到一個循環,並認爲f
將被重新分配,但程序中的邏輯確保它只發生一次。這是Java如何「保護」程序員的例子嗎?
對於大家想知道爲什麼f
被聲明爲final的Netbeans提出的建議,想必當代碼是非常不同的。
爲什麼爲f決賽?當你每隔一次迭代並賦值時 – Hrishikesh
放下「最後」? – Fildor
原因是因爲f是最終的。 – Hrishikesh