以下程序有什么问题?
package test;
public class Test {
byte[] array = new byte[2];
array[0] = 'A';
array[1] = 'B';
}
看,IDE指出了一些问题(点击放大):
换句话说,为什么我应该将填充线移动到另一个内部范围,如下所示:
package test;
public class Test {
byte[] array = new byte[2];
{
array[0] = 'A';
array[1] = 'B';
}
}
IDE对上述程序没有任何问题。
答案 0 :(得分:6)
在此代码段中,您尝试在任何方法之外对数组进行一些分配(例如array[0] = 'A'
)
public class Test {
byte[] array = new byte[2];
array[0] = 'A';
array[1] = 'B';
}
而在此片段中,您可以在实例初始化程序块
中进行分配public class Test {
byte[] array = new byte[2];
{
array[0] = 'A';
array[1] = 'B';
}
}
如果您想在代码中执行此操作,则可以在init方法中执行此操作
public class Test {
byte[] array = new byte[2];
void initArray() {
array[0] = 'A';
array[1] = 'B';
}
}
答案 1 :(得分:1)
示例中的{....}
称为initialization blocks。它们用于设置“final”静态变量的值,而构造函数则不能。在你的情况下你不需要它们,你可以在你的构造函数中初始化你的数组。
如果没有初始化器,它首先没有工作的原因是因为它只是无效的java语法。
答案 2 :(得分:1)
与使用实例初始化程序块相比,您可以在一个简洁的单行中执行您想要的操作,如下所示:
// much better, and much smaller
public class Test {
byte[] array = {'A', 'B'};
}