Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?_Java_Variables_Initialization_Declaration - Fatal编程技术网

在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?

在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?,java,variables,initialization,declaration,Java,Variables,Initialization,Declaration,我试图在更深的层次上理解Java何时需要初始化变量而不是简单的声明。在下面的代码中,不需要为变量“row”赋值来编译和运行,但是变量“column”需要赋值 注意:这个程序没有任何用处——为了不浪费人们宝贵的时间,它被裁剪成只显示这个问题所需的内容 下面是代码片段: int row; //row doesn't need initialization int column=0; //column does need initialization for (row=0; row<2

我试图在更深的层次上理解Java何时需要初始化变量而不是简单的声明。在下面的代码中,不需要为变量“row”赋值来编译和运行,但是变量“column”需要赋值

注意:这个程序没有任何用处——为了不浪费人们宝贵的时间,它被裁剪成只显示这个问题所需的内容

下面是代码片段:

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);
int行//行不需要初始化
int列=0//列确实需要初始化

对于(row=0;row表达式
row=0
(来自外循环)保证被计算,因此
row
变量在使用前总是被初始化。当且仅当外循环至少迭代一次时,
变量才会被初始化。换句话说,expresion
列=0
(来自内环)在
系统.out.println
中使用
变量之前,它们需要初始化,
在外部循环中初始化,因此可以,但列在内部循环中初始化,编译器不进行假设这将永远运行(即使它在实践中会运行)


另一方面,它知道无论发生什么情况,外部
for
循环的初始化语句都保证运行。因此它可以保证
将被初始化。

这似乎是反向的。编译器可以按照您的代码进行操作,并且可以看到在某些条件下
将不会被初始化。在这个特定的例子中,
将始终被初始化。我想说的是编译器不知道这一点。我现在理解你的意思。正如Crozin在下面提到的,两个变量都需要初始化。你只是碰巧在第3行初始化行,但可能永远不会(根据编译器)如果在第2行没有初始化列,则初始化列。