Home >Java >javaTutorial >How to Initialize a Static Map in Java: Static Initializers vs. Instance Initializers?

How to Initialize a Static Map in Java: Static Initializers vs. Instance Initializers?

DDD
DDDOriginal
2024-12-03 12:08:16554browse

How to Initialize a Static Map in Java: Static Initializers vs. Instance Initializers?

Initialising a Static Map in Java

Initialising a static map in Java involves two main approaches: static initialisers and instance initialisers.

Static Initialisers:

Static initialisers allow you to initialise the map directly within the class definition. This is achieved using a static block, as shown in the following example:

public class Test {
    private static final Map<Integer, String> myMap = new HashMap<>();

    static {
        myMap.put(1, "one");
        myMap.put(2, "two");
    }
}

Pros:

  • Concise syntax
  • Initialisation occurs at class loading time
  • The map is final and cannot be modified once set

Cons:

  • Not suitable for immutable maps
  • Can be difficult to read and maintain

Instance Initialisers (Anonymous Subclass):

Instance initialisers provide an alternative syntax for initialising static members. This approach uses an anonymous subclass that overrides the default constructor:

public class Test {
    private static final Map<Integer, String> myMap2 = new HashMap<>() {
        {
            put(1, "one");
            put(2, "two");
        }
    };
}

Pros:

  • Syntactic sugar for static initialisers
  • Can be used to create immutable maps

Cons:

  • Requires an extra anonymous class
  • Not compatible with final classes

Additional Notes:

  • The instance initialiser approach is considered a syntactic sugar for static initialisers.
  • Immutable maps can be created using a static initialiser by first creating a mutable map and then making it unmodifiable using the Collections.unmodifiableMap() method.

The above is the detailed content of How to Initialize a Static Map in Java: Static Initializers vs. Instance Initializers?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn