我遇到了这个非常简单的代码,在我看来,我们必须在我们声明的同一范围内初始化一个变量,如果是这样的话,我对此感到困惑。这里有一个例子:我是否必须在Java中声明的同一范围内初始化一个变量?
class Test
{
public static void main (String[] args)
{
int x; // if initialize x to anything everything works fine
for (int i = 0; i < 3; i++)
{
x = 3;
System.out.println("in loop : " + x);
}
System.out.println("out of loop " + x); // expect x = 3 here, but get an error
}
}
以上代码生成此错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable x may not have been initialized
我很困惑,为什么发生这种情况。我期望int x
告诉Java编译器,我将在声明为x
的范围内创建一个int
变量x
,然后我在for循环中将x
初始化为3。什么原因导致错误?我错过了什么?
作为一个侧面说明,非常相似的代码工作,我预计在C++
#include<iostream>
using namespace::std;
int main()
{
int x;
for(int i = 0; i < 3; i++)
{
x = 3;
cout<<"in loop : "<<x<<endl;
}
cout<<"out of loop : "<<x<<endl; //expect x = 3 here
return 0;
}
我使用的Java和Code :: Blocks的Eclipse进行C++。
在C++中,x被初始化为垃圾。 Java对你的支持并不是让这种事情发生。 – DWright
@DWright +1'-Wall'可能会指出这一点,不确定。 –