对于下面的代码,它给出了编译错误:
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};
这将初始化数组的每个元素。