Java 中未初始化的变量和成员
在 Java 中,声明时没有初始值的变量可能会引发对其在运行时的潜在行为的担忧。考虑以下示例:
public class TestClass { private String a; private String b; public TestClass() { a = "initialized"; } public void doSomething() { String c; a.notify(); // This is fine b.notify(); // This is fine - but will end in an exception c.notify(); // "Local variable c may not have been initialised" } }
在此场景中,该类在 doSomething 方法中包含两个实例变量(a 和 b)和一个局部变量 (c)。虽然访问已初始化的实例变量 a 按预期工作,但使用未初始化的实例变量 b 或局部变量 c 会导致 b 出现运行时异常,c 出现编译时错误。
差异原因?
Java 语言规范规定,对象类型的实例变量在未初始化时默认为 null,而对象类型的局部变量默认不初始化。这意味着访问空对象引用(如 b 的情况)将导致 NullPointerException。
对于局部变量,编译器要求它们在使用前显式初始化,以避免潜在的未定义行为。此检查在编译期间执行,如果访问未初始化的局部变量,则会导致编译时错误。
以上是为什么 Java 中未初始化的变量和成员表现出不同的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!