【Java 简洁初始化类】匿名内部类和实例初始化块

前言

在刷题过程中遇到下面这条语句,看起来十分简洁,但是没看明白其中用到的语法,故学习了一下。

HashMap<Character, String> map = new HashMap<>(){ {put('2', "abc"); put('3', "def"); put('4', >"ghi"); put('5', "jkl"); put('6', "mno"); put('7', "pqrs"); put('8', "tuv"); put('9', "wxyz");} };

这里涉及到两个语法,匿名内部类实例初始化块

匿名内部类

  • 匿名内部类是一种没有名字的局部内部类。它通常用于创建一个只需在一个地方使用的小型类。
  • 匿名内部类通常用于在代码中定义并实例化接口、抽象类或已有类的子类。
  • 定义匿名内部类的语法为:new 类名或接口名 () {...},其中{...}包含了匿名内部类的实现。
  • 匿名内部类可以覆盖父类或接口中的方法,或者定义自己的方法。
  • 匿名内部类通常在创建对象时立即定义和初始化。

JAVA匿名内部类(Anonymous Classes)

实例初始化块

  • 实例初始化块是一个在类的实例化过程中执行的代码块。
  • 它不是方法,而是一个在创建对象时执行的代码段,用于进行对象的初始化工作。
  • 实例初始化块使用一对花括号{}括起来,放置在类的实例变量和构造方法之间。
  • 实例初始化块可以包含任意的Java代码,用于执行初始化操作,例如计算、赋值、异常处理等。
  • 当创建一个类的对象时,实例初始化块会在构造方法之前执行。

别再把静态初始化块和实例初始化块混为一谈了

小结

示例代码中的{{...}}使用了匿名内部类的语法,并在内部定义了一个实例初始化块,该块包含了多个put方法调用,用于初始化map对象。匿名内部类包含了实例初始化块,这个实例初始化块在创建map对象时执行,向map中添加了键值对。这种方式可以用于在创建对象时执行一些特定的初始化操作,而不需要显式定义一个子类或构造方法。

HashMap<Character, String> map = new HashMap<>() {

};

上述代码实际上是定义了一个匿名内部类,是 HashMap 的子类,用来实例化 map ,但并没有任何实际操作。

HashMap<Character, String> map = new HashMap<>() {
    {
        put('2', "abc");
        put('3', "def");
        put('4', "ghi");
        put('5', "jkl");
        put('6', "mno");
        put('7', "pqrs");
        put('8', "tuv");
        put('9', "wxyz");
    }
};

第一对大括号里就可以写一般类能写的东西,比如构造方法,成员变量,其他方法等。只不过这里写了一个实例初始化块,用来初始化 map

仅限刷题使用,实际项目中不建议使用。

Java:双括号初始化 /匿名内部类初始化法

你可能感兴趣的:(Java,#,基础语法,java)