关于Java数组的一个非常简单的初学者问题:
任何人都可以解释为什么编译器不喜欢这个:
class Cycle {}
public class CycleTest {
Cycle[] cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
非常感谢。
答案 0 :(得分:7)
这是因为您尝试执行的代码不在方法或其他类型的代码块中。您必须在类中声明方法或构造函数以包含代码。
例如:
public class CycleTest {
private void initializeCycle() {
Cycle[] cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
}
答案 1 :(得分:4)
您可以使用数组初始值设定项:
public class CycleTest {
Cycle[] cy = {
new Cycle(),
new Cycle(),
new Cycle()
};
}
答案 2 :(得分:3)
而且,如果你真的想让Cycle [] cy拥有对象范围(而不是只能从其定义的方法中访问):
public class CycleTest {
private Cycle[] cy;
private void initializeCycle() {
cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
}
或
public class CycleTest {
private Cycle[] cy = new Cycle[] {
new Cycle(),
new Cycle(),
new Cycle(),
};
private void method() { ... }
...
}
答案 3 :(得分:2)
要初始化实例变量,您可以使用实例初始化块(类似于静态块)
class Cycle {}
public class CycleTest {
Cycle[] cy = new Cycle[3];
{
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
}
或者您应该在申报时初始化它。
答案 4 :(得分:0)
您可以为初始化数据提供构造函数。在创建对象的实例(即new
)时会调用构造函数。您所要做的就是将其命名为与类相同且没有返回类型。
class Cycle {}
public class CycleTest {
Cycle[] cy;
// This is a constructor
// you can put initialization here
public CycleTest(){
cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
}