• 【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");} };
    
    • 1

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

    匿名内部类

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

    JAVA匿名内部类(Anonymous Classes)

    实例初始化块

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

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

    小结

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

    HashMap<Character, String> map = new HashMap<>() {
    
    };
    
    • 1
    • 2
    • 3

    上述代码实际上是定义了一个匿名内部类,是 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");
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

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

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

  • 相关阅读:
    vue基础 组合式和响应式 && 模板语法 && 计算属性
    怎么把本机设置成代理ip?
    【图像处理 】001 Android 中 Bitmap 压缩的几种方法浅析
    RDD的转换Value类型map(func)案例_大数据培训
    推荐几个 vue后台框架
    CompletableFuture的理解
    vue-cli安装与搭建SPA项目
    ping通原理
    Linux下进度条程序实现以及自动化构建工具makefile的实现和对回车键的理解
    vivado BD_PIN、BD_PORT
  • 原文地址:https://blog.csdn.net/m0_46283220/article/details/133441536