为什么这个Java代码会产生错误?

时间:2014-03-27 10:10:30

标签: java

我尝试用Java编译这段代码:

class D
{
    public static void main(String arg[])
    {
        f1();
    }

    static void f1()
    {
        int a;
        int b=5;
        for(;b<=10;b++)
            a=b;
        System.out.println(a);
    }
}

但是它会产生一个错误,上面写着:变量'a'可能尚未初始化。为什么会发生这种情况,尽管在for循环中设置了a

4 个答案:

答案 0 :(得分:5)

循环可能无法运行(编译器无法确定),因此a可能无法初始化。

这不会在循环中执行print语句,只是赋值:

for(;b<=10;b++)
  a=b;
System.out.println(a); //this will only run after the loop.

在上述情况下b是&gt;在循环之前,然后a=b; 永远不会执行,并且print语句将被初始化a

我认为你的意思是:

for(;b<=10;b++) {
  a=b;
  System.out.println(a);
}

如果您打算在循环后打印a,请将其初始化为适当的值,例如: int a = 0;

答案 1 :(得分:2)

方法体内的变量不会像实例字段那样分配默认值等。

因此,int a声明(不会使用值初始化a)会生成编译错误。

a分配一个默认值以摆脱这个问题。

int a = 0;

...或在方法体外声明:

static int a;

static void f1() {
    ...
    System.out.println(a); // no errors
}

答案 2 :(得分:2)

静态错误检查不是那么聪明。 它不知道您的循环将始终运行,因此您可以在不初始化的情况下输出“a”。

这种类型的问题仅在运行时被捕获,因此它会向您发出警告。

答案 3 :(得分:0)

初始化变量

int a = 0;

因为a是局部变量,并且在堆栈上创建局部变量,并且在堆栈内存上创建的变量不会分配任何默认值。所以我们必须初始化局部变量。