超级琐碎初学者问题:Java数组初始化初学者的问题
任何人都可以解释为什么编译器不喜欢这样的:
class Cycle {}
public class CycleTest {
Cycle[] cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
非常感谢。
超级琐碎初学者问题:Java数组初始化初学者的问题
任何人都可以解释为什么编译器不喜欢这样的:
class Cycle {}
public class CycleTest {
Cycle[] cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
非常感谢。
这是因为您试图执行的代码不在方法或其他类型的代码块中。你必须在你的类中声明一个方法或构造函数来包含代码。
例如:
public class CycleTest {
private void initializeCycle() {
Cycle[] cy = new Cycle[3];
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
}
感谢这里的帮助:我想这对我来说并不完全明显,为什么这不算作字段初始化,而是必须在方法体中,但我非常感谢所有这些...... P 。 – 2009-11-12 23:14:57
这不是_field初始值设定项_。根据定义,字段初始值设定项是字段定义中'='右侧的任何内容,并以分号或逗号结尾(如果同时声明了多个字段)。在你的情况下,'new Cycle [3]'是初始值设定项,其他3行只是3个赋值_statements_。 – 2009-11-13 00:00:07
你可以使用数组初始化:
public class CycleTest {
Cycle[] cy = {
new Cycle(),
new Cycle(),
new Cycle()
};
}
我不认为你需要'新的Cycle []'那里。 – 2009-11-12 23:46:46
你说得对。我已经相应编辑了。 – meriton 2009-11-13 20:44:12
而且,如果你真的打算循环[] 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() { ... }
...
}
要初始化实例变量,你可以使用实例初始化块(类似,静态块)
class Cycle {}
public class CycleTest {
Cycle[] cy = new Cycle[3];
{
cy[0] = new Cycle();
cy[1] = new Cycle();
cy[2] = new Cycle();
}
}
,或者你应该在声明时初始化。
您可以为初始化数据提供构造函数。创建对象实例时会调用构造函数,即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();
}
}
请标记为正确答案。 – KomodoDave 2013-02-09 22:10:42