使用全局LinkedList变量确定静态方法

时间:2015-03-24 20:04:34

标签: java linked-list static-methods static-variables

我很难决定何时让我的方法保持静态。我被告知要创建一个全局LinkedList变量:

public static LinkedList list = new LinkedList();

现在,我编写了一个名为read()的方法来读取文本文件中的单词。然后我写了另一个方法preprocessWord(word)来检查这些单词是否以常量开头,将它们改为小写。如果他们有这些条件,那么我将它们添加到LinkedList列表:

  public void read(){
  ....
  while((nextLine = inFile.readLine())!= null){

    tokens = nextLine.trim().split("\\s+");
    for(int i = 0; i < tokens.length; i++){
        word = tokens[i];
        word = preprocessWord(word);
          list.append(word);}
    }
  }
  ...
  }//read

但是,当我尝试从main方法调用read()时;

 public static void main(String[] args) {
  read();
  System.out.println(list);

 }//main

错误是我无法对非静态方法read()进行静态引用,因此我尝试将方法read()preprocessedWord()更改为静态方法,但随后{{ 1}}在words中没有像他们想象的那样更新。我真的不知道在哪里使用静电,在哪里没有,有人可以解释我的想法在哪里出错吗?

2 个答案:

答案 0 :(得分:0)

用外行人的术语来说,当你定义一个非静态的方法时,它只能在这个类的实例上调用。但是在你的情况下你需要运行这样的东西

public static void main(String[] args) {
  new YourClassName().read();
  System.out.println(list);

 }

然而,这样做意味着在您的read方法中,您必须以

的形式访问静态列表
YourClassName.list.append(word)

另一种方法是使read也是静态的,所以在这种情况下你的方法签名应该是

public static void read()

答案 1 :(得分:0)

因为你的read方法不是静态的。除非你需要,否则不要使用satic字段。用于在同一类的所有对象之间共享引用。使列表非静态或甚至本地,并作为参数传递给后续方法调用