Java中已声明的未初始化变量会怎样?

Sir*_*hog 3 java initialization

有价值吗?

我试图了解Java中已声明但未初始化的变量/对象的状态。

我无法实际测试它,因为我不断收到“未初始化”的编译错误,而且我似乎无法抑制它。

虽然例如,我猜想如果变量为a,integer则可能等于0

但是,如果变量将是一个字符串,等于nullisEmpty()返回,该true怎么办?

所有未初始化的变量的值都相同吗?还是每个声明(含义,整数,字符串,双精度型等)在未显式初始化时都有不同的值?


更新

因此,正如我现在所看到的,无论是声明变量locally还是在变量中,它都具有很大的区别Class,尽管我似乎无法理解为什么在类中声明为static时不会给出错误,但是在main中声明时却会产生错误。"Not Initialized" error

fab*_*ian 6

JVM如何精确地执行此操作完全取决于JVM,并且对于程序员而言无关紧要,因为编译器确保您不会读取未初始化的局部变量。

但是字段是不同的。无需在读取它们之前分配它们(除非它们是final),并且尚未分配的字段的值null用于引用类型,或者0适当的原始类型的值(如果该字段具有原始类型)。

s.isEmpty()String s;尚未分配的字段使用会导致NullPointerException


因此,正如我现在所看到的,无论是声明变量locally还是在变量中,它都有很大的不同Class,尽管我似乎无法理解为什么在类中声明时不给出错误,而在主体中声明时却产生"Not Initialized"错误。

通常,使用没有值的值是不可取的。因此,语言设计师有两种选择:

a)为尚未初始化的变量定义默认值
b)防止程序员在写入变量之前访问变量。

b)对于字段很难实现,因此为字段选择了选项a)。(根据调用的顺序,可能有多种读/写方法有效或无效,只能在运行时确定)。

对于局部变量,选项b)是可行的,因为可以检查方法执行的所有可能路径以获取赋值语句。在语言设计中为局部变量选择了此选项,因为它可以帮助发现许多简单的错误。