为了账号安全,请及时绑定邮箱和手机立即绑定

获取错误“线程“主”java.lang.ExceptionInInitializerError ”

获取错误“线程“主”java.lang.ExceptionInInitializerError ”

holdtom 2022-12-15 15:19:27
我正在尝试用 Enum Month 初始化 HashMap。但是,出现如下错误:“线程“主”java.lang.ExceptionInInitializerError 中的异常”。请让我知道为什么会出现此错误。我在静态主类方法和行中得到这个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);        }    }}请找到堆栈跟踪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)
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

它应该是:


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()导致NullPointerException,因为执行语句时static变量months仍然存在。nullput


作为替代方案,避免创建匿名类实例,而是编写:


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);

}


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号