Java Map的初始化

一、前言

static变量的初始化

类变量有点C语言的全局变量的味道,所以一般在单例或者真的只想维护一个全局变量的时候才会使用。

二、Java的Map初始化

介绍两种较为常用的初始化方式,

import java.util.HashMap;
import java.util.Map;

/**
 * 初始化Map static field两种常用方式
 *
 * @since 2021-12-14-3:57 PM
 */
class MapTest {
    /**
     * 该初始化方式的返回一个unmodifiable map
     */
    private static final Map<String, String> TEST_1 =
            Map.ofEntries(
                    Map.entry("1", "A"),
                    Map.entry("2", "B")
                    // Map.entry(null, null) // 运行时空指针异常,不支持存放null key&&value
    );

    private static final Map<String, String> TEST_2 = new HashMap<>() {
        {
            put("1", "A");
            put("2", "B");
        }
    };

    public static void main(String[] args) {
        // TEST_1.get(null); // 运行时空指针异常

        TEST_2.get(null); // 正常运行
    }
}

第一种方式需要jdk9才支持,避免出错其实还是推荐方式二,有很好的避免null调用的运行时异常。
方法二为一种匿名子类的方式,第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。
在Json序列化的时候,方法二会可能出现问题,因此使用static块初始化是一种较为稳妥的做法,

import java.util.HashMap;
import java.util.Map;
public class Test{
    private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
    static {
        myMap.put(1, "one");
        myMap.put(2, "two");
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容