无法在JAVA中检索静态变量的值

时间:2017-07-18 14:51:14

标签: java

我想访问另一个类中的一个Java类中的静态变量集。我正在使用正确的语法,但我每次都得到null。

有人可以帮忙吗?

第1课:

public class Test { 

    public static List<String> dbobj;

    public static void main(String args[]) {
        List<String> accnos= new ArrayList<String>();

        accnos.add("1");
        accnos.add("2");
        accnos.add("3");
        dbobj=accnos;
        System.out.println("dbobj"+dbobj);
    }
}

第2课:

public class Test2 {

    public void main(String args[]) {

    List<String> list1= Test.dbobj;
    System.out.println("List value"+list1);  **//COMING AS NULL**
    }   
}

5 个答案:

答案 0 :(得分:1)

您有两个完全相互独立的入口点(程序)。

当您呼叫Test.dbobj时,main中的Test方法未执行,因此未调用其初始化dbobj=accnos;

有点尴尬,但您可以在打印前调用Test.main(args);来执行该初始化过程。

答案 1 :(得分:0)

如果您使用main Test2方法,则main的{​​{1}}未被调用。
因此,静态变量Test的初始值为dbobj

答案 2 :(得分:0)

首先,你不能拥有2个主要功能并希望它能同时运行,所以更好的方法是在Class1中使用静态代码块,就像这样

static {
    List<String> accnos= new ArrayList<String>();

    accnos.add("1");
    accnos.add("2");
    accnos.add("3");
    dbobj=accnos;
    System.out.println("dbobj"+dbobj);
}

答案 3 :(得分:0)

在类Test2中尝试此更改:

Test.main(args); // added
List<String> list1= Test.dbobj;

问题是您是否在使用类dbobj中的静态变量Test而未初始化该给定变量。截至目前,dbobj内的值为Test.main(),因此您需要调用该方法。

答案 4 :(得分:0)

在Test2类中调用main方法时,没有执行初始化 dbobj 列表的代码。因此它指向NULL。

最简单的解决方法是在声明它时将其初始化:

public static List<String> dbobj list = new ArrayList<>() {
  { add("str1"); add("str2"); }
};

其他解决方案是修复Test1类,如下所示:

public class Test {
  public static List<String> dbobj;

  public static void init() {
    List<String> accnos = new ArrayList<>();
    accnos.add("1");
    accnos.add("2");
    accnos.add("3");
    dbobj=accnos;
    System.out.println("dbobj"+dbobj);
  }
}

public class Test2 {

    public void main(String args[]) {
      Test.init();
      List<String> list1 = Test.dbobj;
      System.out.println("List first value" + list1[0]);  // should be OK
    }   
}