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