这个问题在这里已经有答案了:
为什么局部变量没有在java中初始化(15个答案)
6年前关门了。
我是java的初学者,希望能对变量初始化有一个清晰的认识。这是密码--
public class NumberSequence {
private static int n;
public static void main(String[] args) {
print(myTest());
print(myTest());
}
private static int myTest() {
n++;
return n * n;
}
}
对于方法mytest()的两个连续调用,输出是1和4。所以我知道n的默认值是0。因此,对于mytest()的第一个调用,n将增加一个结果1,然后执行乘法行,即, 1 * 1
哪个是 1
.
对于mytest()的下一个调用,n最初是1,然后它将递增到2,然后是乘法,即 2 * 2
哪个是 4
现在我正试着这么做--
public class NumberSequence {
public static void main(String[] args) {
int m;
m++;
int n = m * m;
print("n = " + n);
}
}
这里给出了编译器错误m没有初始化,这是显而易见的。所以我的问题是——在我创建mytest()方法的第一个选项中,编译器为什么不抱怨呢。在这里我不初始化 n
. 是编译器在做初始化吗?我想澄清一下。
4条答案
按热度按时间fiei3ece1#
是编译器在做初始化吗?
n
是一个静态的NumberSequence
类,如果未初始化,则默认情况下将用零初始化。但是,m
是方法局部变量,需要显式初始化它。j8ag8udp2#
因为编译器无法检查
static
变量在编译时初始化,它为它们提供初始值。另一方面,局部变量应该而且必须在使用前进行初始化,编译器可以为您检查这一点,如果不进行初始化,则会出现错误。
注意,该变量是初始化的,因为它是一个类成员,因此它得到了它的默认值,对于
int
s。soat7uwm3#
所有类或示例字段都初始化为
0, 0.0, null
等等。默认情况下,所有局部变量都不会初始化。tjjdgumg4#
我认为static关键字默认为n为0。在你的第二个程序中你只有“int m”