在HashMap中使用字符串数组,Java
我有一个包含多个字符串数组的hashmap。我试图输出hashmap的一个数组中的每个元素,但是我似乎总是得到
java.lang.NullPointerException
这是我的密码
import java.util.HashMap;
public class TestApp {
private static HashMap<String, String[]> subjects;
public TestApp() {
HashMap<String, String[]> subjects = new HashMap<String, String[]>();
subjects.put("calculus",new String[] {"math","logic"});
subjects.put("chemisty",new String[] {"ions","electrons"});
subjects.put("biology",new String[] {"life","bacteria"});
}
public static void main(String[] args){
for(String s:subjects.get("biology")){
System.out.println(s);
}
}
}
我怎样才能阻止这个问题
# 1 楼答案
TestApp()
内部重新定义了一个与private static
变量无关的新局部变量subjects
李>TestApp()
?这段代码一开始并没有运行李>要么在
main
(或相关的静态函数)中执行所有代码,要么在TestApp()
中执行代码,然后在main
中实例化一个实例。例如:# 2 楼答案
声明
subjects
两次。一个作为类成员,为null,另一个作为构造函数中的局部变量。构造函数必须从以下行开始使用类成员:在循环之前,您需要在
main
中创建一个新的TestApp
实例# 3 楼答案
要设置从静态方法可用的映射,需要在静态块中对其进行初始化。在构造函数中构建它不会证明什么,Java在调用
main
之前不会运行该构造函数另外,由于您似乎是一名学生,在可能的情况下编写接口编程通常被认为是一种良好的做法。i、 例如,如果没有理由需要将
private static Map<String, String[]> subjects;
声明为特定类型的映射,那么我们更愿意在HashMap上声明它# 4 楼答案
您尚未在
main
方法内创建TestApp
对象引用此外,还重新声明了构造函数中的主题。使用: