【发布时间】:2012-03-30 01:35:41
【问题描述】:
Java 中的每个类型在声明时都有一个原始值。文章 Primitive Data Types 包含对原始数据类型的描述。知道了这一点,为什么 Eclipse 会显示错误,告诉我变量可能尚未初始化?
如果我有,例如,
int x;
x++;
【问题讨论】:
-
只有局部变量默认不初始化
Java 中的每个类型在声明时都有一个原始值。文章 Primitive Data Types 包含对原始数据类型的描述。知道了这一点,为什么 Eclipse 会显示错误,告诉我变量可能尚未初始化?
如果我有,例如,
int x;
x++;
【问题讨论】:
来自参考:
局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化局部变量,请确保在尝试使用它之前为其分配一个值。访问未初始化的局部变量将导致编译时错误。
【讨论】:
来自Java Language Specification,Java SE 8 版,4.12.5 Initial Values of Variables:
局部变量(第 14.4 节、第 14.14 节)必须在使用前通过初始化(第 14.4 节)或赋值(第 15.26 节)显式地赋予一个值,其方式可以使用明确的规则进行验证分配(§16(明确分配))。
【讨论】:
局部变量没有被初始化。
这是一个局部变量:
void aaa() {
int x;
}
这是一个实例变量。这些做会自动初始化:
class X {
int x;
}
【讨论】:
null。尝试实例化 int[8] - 每个元素都是 0。
数据类型默认值(用于字段)
字节 0
短0
int 0
长0L
浮动 0.0f
双倍 0.0d
char ‘u0000’
字符串(或任何对象)null
布尔假
【讨论】:
来自您提供的原始数据类型参考:
“局部变量略有不同;编译器从不为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化局部变量,请确保在尝试使用它之前为其分配一个值。访问未初始化的局部变量将导致编译时错误”。
【讨论】:
您看到的不是错误,而是您的 Eclipse 偏好。您可以将其更改为忽略 Eclipse 首选项中未初始化的变量。
【讨论】: