java中的变量初始化

relj7zay  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(501)

这个问题在这里已经有答案了

为什么局部变量没有在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 . 是编译器在做初始化吗?我想澄清一下。

fiei3ece

fiei3ece1#

是编译器在做初始化吗? n 是一个静态的 NumberSequence 类,如果未初始化,则默认情况下将用零初始化。但是, m 是方法局部变量,需要显式初始化它。

j8ag8udp

j8ag8udp2#

因为编译器无法检查 static 变量在编译时初始化,它为它们提供初始值。
另一方面,局部变量应该而且必须在使用前进行初始化,编译器可以为您检查这一点,如果不进行初始化,则会出现错误。
注意,该变量是初始化的,因为它是一个类成员,因此它得到了它的默认值,对于 int s。

soat7uwm

soat7uwm3#

所有类或示例字段都初始化为 0, 0.0, null 等等。默认情况下,所有局部变量都不会初始化。

public class NumberSequence {
  // Static field is initailized to 0 by default
  private static int n; 

  public static void main(String[] args) {
    // Quite OK: n being a static field is initialized to zero
    n = n * n;

    // local variable, aren't initialized 
    // (so it contains trash)
    int m;
    // Attempt to use trash value (since m hasn't been initialized so far) 
    // results in compiler warning/error 
    int n = m * m;
tjjdgumg

tjjdgumg4#

我认为static关键字默认为n为0。在你的第二个程序中你只有“int m”

相关问题