Ada*_*zak 3 java string arraylist
我有一个简单的arraylist设置,但我似乎无法添加对象.
import java.util.ArrayList;
public class Inventory {
ArrayList inventory = new ArrayList();
String item1 = "Sword";
String item2 = "Potion";
String item3 = "Shield";
inventory.add(item1);
inventory.add(item2);
inventory.add(item3);
}
Run Code Online (Sandbox Code Playgroud)
有两个错误,一个在库存和添加之间的点,一个在括号之间的变量名称,是
Syntax error on token(s), misplaced construct(s)
Run Code Online (Sandbox Code Playgroud)
和
Syntax error on token "item1", VariableDeclaratorId expected after this token
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会这样吗?
dar*_*jan 12
你的代码不起作用的原因是你试图在类体中编写代码.可执行语句应该用静态初始化器,方法或构造函数编写(就像我在下面的例子中所做的那样).
试试这个:
public class Inventory {
private List inventory = new ArrayList();
public Inventory() {
String item1 = "Sword";
String item2 = "Potion";
String item3 = "Shield";
inventory.add(item1);
inventory.add(item2);
inventory.add(item3);
}
}
Run Code Online (Sandbox Code Playgroud)
我inventory在类体中定义了类成员并将其初始化为in-place(= new ArrayList();).没有编译器错误,因为在类体中允许声明.我将其他代码放入将inventory使用值初始化的构造函数中.我可以把它放在一个方法中,但我选择了构造函数,因为它通常的作用是初始化类成员.
在Java中,add除了方法或构造函数的定义之外,您不能拥有可执行语句,例如方法的调用.声明没问题,但可执行语句不行.
您可以将这些项添加到命名构造函数,但您也可以使用匿名初始化块,如下所示:
public class Inventory {
ArrayList inventory = new ArrayList();
{ // An anonymous initialization block
String item1 = "Sword";
String item2 = "Potion";
String item3 = "Shield";
inventory.add(item1);
inventory.add(item2);
inventory.add(item3);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你使用这样的块,它将在类的所有命名构造函数之间共享,或者它将成为隐式生成的构造函数的一部分Inventory.
你的"添加"语句只是"在空中":不在一个方法或构造函数中.
例如,在内部包裹:
public class Inventory {
private List inventory = new ArrayList(); //prefer interface here ;)
public Inventory(){ //statements wrap into this constructor
inventory.add("Sword");
inventory.add("Potion");
inventory.add("Shield");
}
}
Run Code Online (Sandbox Code Playgroud)