java - 静态变量在 main 方法之外出现 null

标签 java arrays static

我正在为类构建一个词法/句法分析器。我遇到的问题是,当我尝试从 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++;
    }
}

最佳答案

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

要对静态进行操作,您应该这样做

    /*NOTHING HERE!!*/ lexems = lex.getLexems();
    lex.printList(lexems);
    ...

token 也会出现同样的问题

    /*NOTHING HERE!!*/ tokens = lex.getTokens();
    lex.printList(tokens);
    ...

关于java - 静态变量在 main 方法之外出现 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136791/

相关文章:

javascript - 确保 JavaScript 中 shuffle 后的第一个元素与上一次 shuffle 中的最后一个元素不同

java - 需要帮助找出 Java 中的基本多线程代码有什么问题(多个生产者 - 一个消费者)

java - JPA 查询语法异常 : unexpected AST node: {vector} For In condition

java - 如何使用对象数组获取 JSONObject

java - 如何从已通过 OAuth2 身份验证的服务器使用 C2DM 向设备发送消息?

c - 返回指针时,什么时候数据需要是静态的?

c++ - std::list 中动态分配的数组导致内存泄漏

java - 莫尔斯电码到英语/英语到莫尔斯电码转换器

java - 主屏幕小部件运行时,数据对象的静态数组列表是否会导致内存泄漏

java - Java 中静态方法的替代方法