java中的变量初始化

时间:2014-03-11 12:43:10

标签: java initialization

我是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 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 个答案:

答案 0 :(得分:3)

默认情况下,所有课程或实例 字段 都会初始化为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;

答案 1 :(得分:2)

  

编译器是否正在进行初始化?

nNumberSequence类的静态字段,默认情况下会初始化为零,如果您未初始化的话。但是,m是方法局部变量,您需要显式初始化它。

答案 2 :(得分:1)

由于编译器无法检查编译时是否初始化static变量,因此它为它们提供了初始值。

另一方面,本地变量应该并且必须在之前初始化,并且编译器可以为您检查这些变量,并且如果它们&#将出现错误39;不是。

请注意,变量已初始化,因为它是类成员,因此它获取了默认值,int为0。

答案 3 :(得分:0)

我认为static关键字默认为n为0.在你的第二个程序中,你只需要" int m"