为什么数组类型的类变量不能在声明后初始化,但可以在 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;
}
}

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

注意:数组从零开始,array[5]会抛出一个IndexOutOfBoundsException。最小索引为 0,最大索引为 4,进行 5 个条目。

你可以这样做:

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

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

以下内容不是声明,而是语句:

array[5] = 10;

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

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

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

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

最新更新