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

时间:2015-10-14 22:34:01

标签: java arrays static

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

怎么回事?

A = [T,B,C,D,E,F,G,H,I,J,K,L,M,N,O];

fileID = fopen('baseline1.txt','w');
fprintf(fileID,['%6s ' repmat('%12s ',[1 14]) '\n'],'T','B','C','D','E','F','G','H','I','J','K','L','M','N','O');
fprintf(fileID,['%6s ' repmat('%12s ',[1 14]) '\n'],A.');
fclose(fileID);

4 个答案:

答案 0 :(得分:8)

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

要操作你应该做的静态

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

令牌出现同样的问题

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

答案 1 :(得分:1)

问题在于:

ArrayList<String> lexems = lex.getLexems();
lex.printList(lexems);
ArrayList<String> tokens = lex.getTokens();

在main函数中,您不修改静态变量,而是修改静态变量(main函数中的local)。 只需将其更改为:

lexems = lex.getLexems();
tokens = lex.getTokens();

答案 2 :(得分:0)

您正在main方法中创建另一对变量,这些变量恰好与静态变量具有相同的名称,并且在main方法的范围内“掩盖”它们。

要解决此问题,您不应声明新变量,而应初始化现有变量:

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

答案 3 :(得分:0)

这应该有助于区分代码中使用的范围:

public class MyClass{
    private static int myInt;
    public static void main(String[] args){
         int myInt = 6;
         printMyInt();
    }
    static void printMyInt(){ System.out.println(myInt); } // Prints 0 because uses the class field
}