在Java中,为什么某些变量初始化需要先和其他人只需要申报?(In Java, why do cer

2019-09-16 10:20发布

我想了解更深的层次,如果我失去了一些东西,以了解当Java需要一个变量的初始化VS一个简单的声明。 在下面的代码中,变量“行”并不需要被分配一个值但编译和运行,变量“列”一样。

注意:此程序不执行任何使用 - 它被修整,只显示什么必要这个问题,以不浪费人民的宝贵时间。

下面的代码片段:

int row;      //row doesn't need initialization
int column=0; //column does need initialization
for (row=0; row<2; row++){
    for (column=0; column<2; column++){
    }
}
System.out.print("Col:" + column + " row:" + row);

为什么row编译W / O顶部初始化,但Java会把column “可能不会被初始化。”?

Answer 1:

表达row = 0 (从外环)保证要被评估,因此row变量总是会在使用前进行初始化。 的column ,当且仅当,外循环将重复至少一次变量将被初始化。 换句话说,expresion column = 0 (从内环) 不能保证进行评价。



Answer 2:

前两者的rowcolumn变量在使用System.out.println ,他们需要被初始化,。 row在外环初始化,所以这是好的,但列在内环初始化,编译器不作任何假设,这将永远运行(尽管它在实践中)。



Answer 3:

Java编译器不能按照你的代码。 它看到column被外体内部初始化for循环,但还没有被确认的代码将永远运行方式。 因此,它不能确定它之前在调用访问真实的变量总是会被初始化print

在另一方面,它知道外的初始化语句for循环保证运行不管是什么。 因此,它可以保证row将被初始化。



文章来源: In Java, why do certain variables need initialization at first and others only need declaration?