2009-11-12 105 views
0

超级琐碎初学者问题:Java数组初始化初学者的问题

任何人都可以解释为什么编译器不喜欢这样的:

class Cycle {} 

public class CycleTest { 
    Cycle[] cy = new Cycle[3]; 
    cy[0] = new Cycle(); 
    cy[1] = new Cycle(); 
    cy[2] = new Cycle(); 
} 

非常感谢。

+0

请标记为正确答案。 – KomodoDave 2013-02-09 22:10:42

回答

7

这是因为您试图执行的代码不在方法或其他类型的代码块中。你必须在你的类中声明一个方法或构造函数来包含代码。

例如:

public class CycleTest { 
    private void initializeCycle() { 
     Cycle[] cy = new Cycle[3]; 
     cy[0] = new Cycle(); 
     cy[1] = new Cycle(); 
     cy[2] = new Cycle(); 
    } 
} 
+0

感谢这里的帮助:我想这对我来说并不完全明显,为什么这不算作字段初始化,而是必须在方法体中,但我非常感谢所有这些...... P 。 – 2009-11-12 23:14:57

+0

这不是_field初始值设定项_。根据定义,字段初始值设定项是字段定义中'='右侧的任何内容,并以分号或逗号结尾(如果同时声明了多个字段)。在你的情况下,'new Cycle [3]'是初始值设定项,其他3行只是3个赋值_statements_。 – 2009-11-13 00:00:07

4

你可以使用数组初始化:

public class CycleTest { 
    Cycle[] cy = { 
     new Cycle(), 
     new Cycle(), 
     new Cycle() 
    }; 
} 
+2

我不认为你需要'新的Cycle []'那里。 – 2009-11-12 23:46:46

+0

你说得对。我已经相应编辑了。 – meriton 2009-11-13 20:44:12

3

而且,如果你真的打算循环[] 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() { ... } 
    ... 
} 
2

要初始化实例变量,你可以使用实例初始化块(类似,静态块)

class Cycle {} 

public class CycleTest { 
    Cycle[] cy = new Cycle[3]; 

    { 
     cy[0] = new Cycle(); 
     cy[1] = new Cycle(); 
     cy[2] = new Cycle(); 
    } 
} 

,或者你应该在声明时初始化。

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(); 
    } 
}