为什么数组类型的类变量可以';不能在声明后初始化,但可以在Java中的方法内初始化?
对于以下代码,它给出了一个编译错误:为什么数组类型的类变量可以';不能在声明后初始化,但可以在Java中的方法内初始化?,java,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[]
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;
}
}
对于要执行的代码,它必须位于变量声明处或方法内部。在第一个示例中,
newint[5]
位于实例变量的声明处,但是array[5]=10代码>既不在声明中,也不在方法中。在第二个示例中,两者都在一个方法中
注意:数组是基于零的,数组[5]
将抛出索引自动边界异常
。最小索引为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};
这将初始化数组中的每个元素。不要忘记初始化块。代码也可以存在于那里。是的,static{}
是一个特殊的命名(或实际上未命名)方法,但它仍然是一个方法。并非所有初始化块都是静态的。感谢Rutte,我已经将索引更新为10个值。