[英]Getting Error “Exception in thread ”main“ java.lang.ExceptionInInitializerError”
I am trying to initialize HashMap with Enum Month. 我试图用枚举月初始化HashMap。 However, getting an error like: "Exception in thread "main" java.lang.ExceptionInInitializerError".
但是,出现类似以下错误:“线程“主”中的异常java.lang.ExceptionInInitializerError”。 Please let me know why I am getting this error.
请让我知道为什么我收到此错误。 I am getting this in static main class method and for line
ChatGroups.initializeMap();
我在静态主类方法和
ChatGroups.initializeMap();
行中获取此信息ChatGroups.initializeMap();
package static_initialization;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
public class ChatGroups {
public static final Map<String, Month> months = new HashMap<String, Month>() {{
months.put("Jan", Month.January);
months.put("Feb", Month.February);
months.put("Mar", Month.March);
months.put("Apr", Month.April);
months.put("Jun", Month.June);
months.put("Jul", Month.July);
months.put("Aug", Month.August);
months.put("Sep", Month.September);
months.put("Oct", Month.October);
months.put("Nov", Month.November);
months.put("Dec", Month.December);
}};
public static void initializeMap() {
System.out.println();
}
}
package static_initialization;
public enum Month {
January(0),
February(1),
March(2),
April(3),
May(4),
June(5),
July(6),
August(7),
September(8),
October(9),
November(10),
December(11);
private int month;
Month(int i) {
month = i;
}
}
package static_initialization;
public class Main {
public static void main(String[] args) {
initializeMaps();
}
public static void initializeMaps() {
try {
ChatGroups.initializeMap();
} catch (Exception ex) {
System.out.println("Neelabh exception = " + ex);
}
}
}
Please find the stack trace 请找到堆栈跟踪
Exception in thread "main" java.lang.ExceptionInInitializerError
at static_initialization.Main.initializeMaps(Main.java:10)
at static_initialization.Main.main(Main.java:5)
Caused by: java.lang.NullPointerException
at static_initialization.ChatGroups$1.<init>(ChatGroups.java:9)
at static_initialization.ChatGroups.<clinit>(ChatGroups.java:8)
It should be: 它应该是:
public static final Map<String, Month> months = new HashMap<String, Month>() {{
put("Jan", Month.January);
put("Feb", Month.February);
put("Mar", Month.March);
put("Apr", Month.April);
put("Jun", Month.June);
put("Jul", Month.July);
put("Aug", Month.August);
put("Sep", Month.September);
put("Oct", Month.October);
put("Nov", Month.November);
put("Dec", Month.December);
}};
months.put()
leads to NullPointerException
, since the static
variable months
is still null
when the put
statements are executed. months.put()
导致NullPointerException
,因为执行put
语句时static
变量months
仍然为null
。
As an alternative, avoid creating an anonymous class instance, and instead write: 另外,请避免创建匿名类实例,而应编写:
public static final Map<String, Month> months = new HashMap<String, Month>();
static {
months.put("Jan", Month.January);
months.put("Feb", Month.February);
months.put("Mar", Month.March);
months.put("Apr", Month.April);
months.put("Jun", Month.June);
months.put("Jul", Month.July);
months.put("Aug", Month.August);
months.put("Sep", Month.September);
months.put("Oct", Month.October);
months.put("Nov", Month.November);
months.put("Dec", Month.December);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.