我想访问另一个类中的一个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**
}
}
答案 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
}
}