我尝试编写一个小程序,但它不会编译。Eclipse 在最后一行显示以下错误:
- 标记的语法错误,错误的构造
令牌“200000”的语法错误,删除此令牌
import java.util.ArrayList; public class Books{ ArrayList<String> booksDB = new ArrayList<String>(); booksDB.ensureCapacity(200000); //Compilation Errors }
除了声明和导入,Java 中的所有代码都必须驻留在方法中(或者,如下所述,在初始化器中,它们本质上也是方法):
import java.util.ArrayList;
public class Books {
ArrayList<String> booksDB = new ArrayList<String>();
public void doSomething() {
booksDB.ensureCapacity(200000); //Compilation Errors
}
}
由于您似乎正在初始化对象的内容,您可能希望将该行放入构造函数中,这是一种在新创建的对象上自动运行的方法:
import java.util.ArrayList;
public class Books {
ArrayList<String> booksDB = new ArrayList<String>();
public Books() {
booksDB.ensureCapacity(200000); //Compilation Errors
}
}
public class Books{
ArrayList<String> booksDB = new ArrayList<String>();
booksDB.ensureCapacity(200000); //Compilation Errors
}
您可能会认为此代码是按顺序执行的(从上到下),但事实并非如此。您正在做的是创建一个名为的私有实例字段booksDB
,每个实例都Books
将携带该字段。
最有可能的是,您希望该代码进入 Books 构造函数(每当创建new
实例时都会调用该构造函数Books
。尝试以下操作:
public class Books {
private ArrayList<String> booksDB; // this is a field of the Books class
// when we create a new Books instance, we will initialize the booksDB field
public Books() {
booksDB = new ArrayList<String>();
booksDB.ensureCapacity(20000);
}
}
然后使用如下:
public class Main {
public static void main(String[] args) {
Books b = new Books(); // the Books object is constructed, and its private field booksDB is initialized as we specified.
}
}
您可以使用接受初始容量的 ArrayList 的构造函数,如下所示
import java.util.ArrayList;
public class Books{
ArrayList<String> booksDB = new ArrayList<String>(200000);
}
仅从方法访问变量( booksDB )。这就是你所要做的。