为什么类型数组的类变量不能在声明后初始化,但是可以在Java中的方法内初始化?

时间:2018-06-10 10:06:05

标签: java

对于下面的代码,它会出现编译错误:

public class Main {

    int[] array = new int[10];
    array[5] = 10;
    public static void main(String[] args) {
    }
}

虽然下面的代码没有给出编译错误,但两者的区别是什么?

public class Main {


    public static void main(String[] args) {
        int[] array = new int[10];
        array[5] = 10;
    }

}

3 个答案:

答案 0 :(得分:4)

对于要执行的代码,它必须是变量的声明,或者是方法内部。在您的第一个示例中,new int[5]位于实例变量的声明中,但array[5] = 10;既不在声明中也不在方法中。在第二个例子中,两者都在一个方法中。

注意:数组基于零,array[5]会抛出IndexOutOfBoundsException。最小索引为0,最大值为4,为5个条目。

答案 1 :(得分:2)

你可以这样做:

public class Main {

    int[] array = new int[10];
    {
        array[5] = 10;
    }

    public static void main(String[] args) {
    }
}

关于问题"为什么",答案是 - 因为Java语言规范不允许在类体中直接使用任意语句。

答案 2 :(得分:0)

以下不是声明,而是声明:

array[5] = 10;

Java不知道何时执行它(与方法内部不同)它不属于明确定义的控制流。

如果你想一次声明初始化你的数组,你可以这样:

int[] array = new int[] {1, 2, 3};

这会初始化数组的每个元素。