gpt4 book ai didi

java - 为什么java在使用未初始化变量时会区别对待类作用域和方法作用域?

转载 作者:行者123 更新时间:2023-11-30 05:52:29 26 4
gpt4 key购买 nike

Java 不允许您使用可能尚未在方法范围内初始化的变量。类范围内未初始化的变量仍可能由类方法返回,并且值默认为 null。

为什么对两个不同的作用域进行不同的处理?

public class TestClass {

Integer i;
Double d;

public TestClass() {
d = 1d;
}

public Double getD() {
return d;
}

public Integer getI() {
return i;
}

// public Integer getSomeInt() {
// Integer i;
// return i;
// }

public static void main(String[] args) {
TestClass myClass = new TestClass();
System.out.println(myClass.getI().getClass());
}
}

这会导致 NullPointerException,但在 getSomeInt() 中返回 i 是编译器错误,因为“变量可能尚未初始化”。

最佳答案

这背后的原因是Java静态代码分析的局限性。编译器能够毫无疑问地证明您不会在初始化之前读取堆栈分配的局部变量。这对于堆分配的内存是不可能的,因此 Java 要求在公开指向它的指针之前将所有堆分配的存储清零。

此规则的结果是堆分配的所有内容都具有默认值零(false、null,无论该类型的二进制零是多少)。

关于java - 为什么java在使用未初始化变量时会区别对待类作用域和方法作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11612280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com