2015-03-24 2 views
0

Мне очень сложно решить, когда ставить статические методы или нет. Мне сказали, чтобы сделать глобальную переменную LinkedList:Определение статического метода с глобальной переменной 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 

Однако, когда я пытаюсь вызвать read() от основного метода;

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

}//main 

ошибка, я не могу сделать статическую ссылку на нестатической метод read(), поэтому я попытался изменить мои методы read() и preprocessedWord() статических методов, но затем words не обновляются в preprocessedWord() как они полагаю. Я действительно не понимаю, где использовать статику, а где нет, может кто-нибудь объяснить, где я ошибаюсь в своих мыслях?

+0

Потому что ваш метод 'read' не является статическим. – Antoniossss

ответ

0

в условиях неспециалиста, когда вы определяете метод нестатический, его можно вызвать только в экземпляре этого класса. В вашем случае, однако вам нужно будет запустить что-то вроде этого

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

} 

Doing так, однако, означало бы, что в вашем методе чтения, вы должны получить доступ к статический список, как

YourClassName.list.append(word) 

Другой подход было бы сделать чтения статические, так что в этом случае ваш метод подписи должен быть

public static void read() 
0

ПОТОМУ ваш метод read не является статичным. Не используйте поле satic, если вам не нужно, например. для обмена ссылками между всеми объектами того же класса. Сделайте свой список нестатическим или даже локальным и передайте в качестве аргумента для последующих методов. Вызовы

Смежные вопросы