use*_*188 6 java arrays jvm hashmap
我有一个包含多个字符串数组的hashmap.我试图输出hashmap的一个数组中的每个元素,但我似乎总是得到
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
这是我的代码,
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能阻止这个问题?
mel*_*okb 14
subjects
里面TestApp()
是无关的private static
变量.TestApp()
?该代码首先没有运行.要么完成所有代码main
(或相关的静态函数),要么执行代码TestApp()
并只是实例化实例main
.例如:
private static HashMap<String, String[]> subjects;
public TestApp() {
}
public static void main(String[] args){
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"});
for(String s:subjects.get("biology")){
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
要将地图设置为可从静态方法获得,您需要在静态块中初始化它.在构造函数中构建它不会证明任何东西,Java在调用之前不会运行该构造函数main
.
import java.util.HashMap;
public class TestApp {
private static HashMap<String, String[]> subjects;
static {
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,由于您似乎是一名学生,因此通常认为在可能的情况下对接口进行编程是一种很好的做法.也就是说,private static Map<String, String[]> subjects;
当没有必要成为特定类型的Map时,我们宁愿在HashMap 上声明