为什么要使用null值实例化变量

Qua*_*Oat 12 java programming-languages

在许多示例代码中,我看到用空值实例化的变量,后来分配了更有意义的值.

我只是想知道为什么人们会这样做.我猜测try-catch块很可能会进入这个,但我也看到实例化的变量将在try块内部为null值.

(我确定这是一个相当语言不可知的问题,但仅供参考我几乎完全用Java编程)

所有见解都表示赞赏!

MFo*_*ter 13

在某些情况下,Java编译器会检测是否所有可能的控制流中都未初始化变量并输出错误.要避免这些错误消息,必须显式初始化变量.

例如,在这种情况下:

  public Integer foo() {
    Integer result;

    if (Math.random() < 0.5) {
      result = 1;
    }

    return result;
  }
Run Code Online (Sandbox Code Playgroud)

编译器会给出以下错误消息:"本地变量结果可能尚未初始化".

以下是Java语言规范所说的内容:

当对其值进行任何访问时,每个局部变量(第14.4节)和每个空白最终(第4.5.4节)字段(第8.3.1.2节)必须具有明确赋值.Java编译器必须执行特定的保守流分析,以确保对于本地变量或空白最终字段f的每次访问,f在访问之前是明确分配的; 否则必须发生编译时错误.

请注意(与字段相反!)局部变量不会自动初始化为null.

  • 有没有人认为QuakerOat问这个问题很奇怪,而麦克风评论答案呢? (12认同)