0

我尝试编写一个小程序,但它不会编译。Eclipse 在最后一行显示以下错误:

  • 标记的语法错误,错误的构造
  • 令牌“200000”的语法错误,删除此令牌

    import java.util.ArrayList;
    public class Books{
      ArrayList<String> booksDB = new ArrayList<String>();
      booksDB.ensureCapacity(200000);        //Compilation Errors
    }
    
4

4 回答 4

1

除了声明和导入,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
    }
}
于 2013-05-31T23:25:11.213 回答
1
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.
    }
}
于 2013-05-31T23:30:45.967 回答
1

您可以使用接受初始容量的 ArrayList 的构造函数,如下所示

import java.util.ArrayList;
public class Books{
   ArrayList<String> booksDB = new ArrayList<String>(200000);
}
于 2013-05-31T23:36:14.843 回答
0

仅从方法访问变量( booksDB )。这就是你所要做的。

于 2013-05-31T23:27:49.663 回答