静态变量在main方法之外显示为null

Chr*_*ier 0 java arrays static

我正在为课堂建立一个词汇/ syntex分析器.我遇到的问题是当我尝试从除了main之外的方法访问我的静态变量"lexems"或"tokens"时它们是NULL.当我在main中使用它们(例如lex.printList方法)时,它们很好并且填充了数据.

这是怎么回事???

import java.io.IOException;
import java.util.ArrayList;

public class SyntaxAnalyzer {
    public static int pos = 0;
    public static ArrayList<String> lexems = new ArrayList<String>();
    public static ArrayList<String> tokens = new ArrayList<String>();
    public static String nextToken;

    public static void main(String[] args) throws IOException {
        LexicalAnalysis lex = new LexicalAnalysis();
        lex.getFile();
        lex.parseText();
        ArrayList<String> lexems = lex.getLexems();
        lex.printList(lexems);
        ArrayList<String> tokens = lex.getTokens();
        lex.printList(tokens);
        //expr();
        lex();

    }


    static void lex(){
        //String lexem = lexems.get(pos);
        //System.out.println(lexem);
        nextToken = tokens.get(pos);
        pos++;
    }
}
Run Code Online (Sandbox Code Playgroud)

m.a*_*icz 8

您使用本地对象覆盖lexems对象,因此它不是您在main函数内修改的静态变量.

要对静态操作,你应该做

    /*NOTHING HERE!!*/ lexems = lex.getLexems();
    lex.printList(lexems);
    ...
Run Code Online (Sandbox Code Playgroud)

令牌出现同样的问题

    /*NOTHING HERE!!*/ tokens = lex.getTokens();
    lex.printList(tokens);
    ...
Run Code Online (Sandbox Code Playgroud)

  • 这个词是_shadowing_. (2认同)