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

我正在尝试用 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)


holdtom
浏览 99回答 1
1回答

繁星coding

它应该是:public static final Map<String, Month> months = new HashMap<String, Month>() {{&nbsp; &nbsp; put("Jan", Month.January);&nbsp; &nbsp; put("Feb", Month.February);&nbsp; &nbsp; put("Mar", Month.March);&nbsp; &nbsp; put("Apr", Month.April);&nbsp; &nbsp; put("Jun", Month.June);&nbsp; &nbsp; put("Jul", Month.July);&nbsp; &nbsp; put("Aug", Month.August);&nbsp; &nbsp; put("Sep", Month.September);&nbsp; &nbsp; put("Oct", Month.October);&nbsp; &nbsp; put("Nov", Month.November);&nbsp; &nbsp; put("Dec", Month.December);}};months.put()导致NullPointerException,因为执行语句时static变量months仍然存在。nullput作为替代方案,避免创建匿名类实例,而是编写:public static final Map<String, Month> months = new HashMap<String, Month>();static {&nbsp; &nbsp; months.put("Jan", Month.January);&nbsp; &nbsp; months.put("Feb", Month.February);&nbsp; &nbsp; months.put("Mar", Month.March);&nbsp; &nbsp; months.put("Apr", Month.April);&nbsp; &nbsp; months.put("Jun", Month.June);&nbsp; &nbsp; months.put("Jul", Month.July);&nbsp; &nbsp; months.put("Aug", Month.August);&nbsp; &nbsp; months.put("Sep", Month.September);&nbsp; &nbsp; months.put("Oct", Month.October);&nbsp; &nbsp; months.put("Nov", Month.November);&nbsp; &nbsp; months.put("Dec", Month.December);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java