java - java中的变量初始化

标签 java initialization

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





Why are local variables not initialized in Java?

(17 个回答)


7年前关闭。




我是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 的值.编译器是否正在执行初始化?我想得到这个澄清。

最佳答案

所有类或实例 字段 初始化为 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;

关于java - java中的变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326110/

相关文章:

java - 使用 nohup 调用 java 应用程序时如何从控制台获取密码

java - 如何在由azure应用程序服务门户UI部署的azure java应用程序中配置Web.config文件

c++ - 调用转换函数后是否调用了移动构造函数?

c++ - 使用 vector 资源句柄的递归成员初始化

objective-c - Cocoa:从 AppDelegate.m 调用方法

java - 将两个 catch 子句组合在一起

java - 从许多队列中消费

java - 如果从 JAR 启动,Jetty + Jersey 嵌入式服务器将无法工作

python - 使用相同的 boolean 值初始化列表

java - 明确分配变量