Java int数据类型初始化:数组与常规

Java int数据类型初始化:数组与常规,java,arrays,Java,Arrays,我在第1行收到一个编译器错误(显然),说明变量可能尚未初始化 我知道默认情况下所有int数组元素都初始化为0(因此第2行编译成功),但我的问题是为什么编译器不能对常规(非数组)int变量应用相同的逻辑(所有int都设置为0) 是否有任何限制禁止编译器执行此操作?当变量范围是本地变量时,必须初始化本地变量 当您声明任何局部/块变量时,它们没有得到默认值。在访问它之前,它们必须分配一些值,否则编译器将抛出错误 正如您在代码中看到的 class returntest { public stat

我在第1行收到一个编译器错误(显然),说明变量可能尚未初始化

我知道默认情况下所有int数组元素都初始化为0(因此第2行编译成功),但我的问题是为什么编译器不能对常规(非数组)int变量应用相同的逻辑(所有int都设置为0)


是否有任何限制禁止编译器执行此操作?

当变量范围是本地变量时,必须初始化本地变量

当您声明任何局部/块变量时,它们没有得到默认值。在访问它之前,它们必须分配一些值,否则编译器将抛出错误

正如您在代码中看到的

class returntest
{
    public static void main(String...args)
    {
        int a;
        System.out.println(a); //Line 1

        int b[] = new int[10];
        System.out.println(b[1]); //Line 2
    }
}
当您为局部变量分配资源时,Java不会将值写入内存。出现错误的原因是Java确保在使用它之前为它指定一个值。Sun意识到在C代码中诊断这是一个困难的问题,因为您没有从编译器获得帮助,所以他们决定在编译时检查它

请参阅

局部变量略有不同;编译器从不指定 未初始化的局部变量的默认值。如果你不能 初始化声明的局部变量,确保 在尝试使用它之前为它指定一个值。访问 未初始化的局部变量将导致编译时错误


语句块中定义的局部变量在使用前必须初始化

但是成员变量,即直接在类主体中定义的变量,在创建对象时会自动初始化为0


有用的线程。

这是一个语言设计决策


对局部变量进行默认初始化可能会隐藏错误。使用局部变量意味着您要先设置它。忘记设置它的简单情况,或者仅在
中设置它(如果
则被捕获)。

请查看将来的情况,当您提出问题时,请适当设置代码格式-请参阅。如果您使用常规名称(不像
returntest
),即使是用于伪代码,它也会有所帮助——这样就不会让人分心了。
int a; //Gives error because not assigned any value