【JAVA】 new ArrayList<> () {{}} 双花括号 是什么写法?

1、引言

很多时候,我们会看到 new ArrayList<String>(){{}}这样的写法,跟着写的同时却会产生疑惑,为什么可以这样写呢?下面就来探究一下。

new ArrayList<String>(){{add("小明");add("小红");
}};

2、探究

  1. 为了方便研究这种写法可行的原因,我们对双花括号进行逐层研究。我们先研究外层的花括号。
new ArrayList<String>(){};
  1. 看到这里,明眼人应该已经看出来这其实是匿名内部类的写法。如果还看不出来的话,可以在看看下面的代码。
new ArrayList<String>(){@Overridepublic boolean add(String s) {return super.add(s);}
};
  1. 换成这种形式后,就更容易看出来了。new ArrayList<String>(){}实际上就是 创建了ArrayList的一个匿名内部类的对象,只不过我们没有重写其任何方法而已。

  2. 外层花括号研究完毕,我们研究内层的花括号

new ArrayList<String>(){//构造代码块{add("小明");add("小红");}
};
  1. 很显然,既然是内部类,我当然可以有构造代码块。所以实际上,里面的{}是匿名内部类的构造代码块而已。如果不好理解的话,看看以下代码。
new ArrayList<String>(){//构造代码块{ add("小明");add("小红");}//重写父类方法@Override public boolean add(String s) {return super.add(s);}//自己的方法public void sayHello(){System.out.println("hello");}
};

3、结语

​之前一直知道这种写法,自己也这么写过。但是始终觉得这种写法很怪异 ,今天终于抽空简单研究一下。原来就是一个匿名内部类加一个构造代码块

【JAVA】 new ArrayList<> () {{}} 双花括号 是什么写法?相关推荐

  1. Java HashMap双花括号初始化数据的代码解析,及带来的问题分析

    引言 package com.azdebugit.test.collection;import java.util.HashMap; import java.util.Map; import java ...

  2. react中jsx行内样式(style)的国定写法、jsx双花括号{{}}写法的解释

    共index.js.index.html. TodoList.js这三个文件,主要看TodoList.js中的Input标签的style样式双花括号{{}}的写法,会在下方做全面的解释 运行效果: i ...

  3. (Java)ArrayList集合

    ArrayList集合概述和基本使用 ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类. 数组的长度不可以发生改变,但是ArrayList的长度是可以随时变化的 对于Ar ...

  4. [Leedcode][JAVA][第22题括号生成][DFS][BFS][动态规划]

    [问题描述]22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合. 示例:输入:n = 3 输出:["((()))",&q ...

  5. 【零基础学Java】—ArrayList集合概述和基本使用(十四)

    [零基础学Java]-ArrayList集合概述和基本使用(十四) 一.什么是ArrayList类以及注意事项 java.util.ArrayList是大小可变的数组的实现,存储在内的数据称为元素,此 ...

  6. JAVA 中级 ARRAYLIST - ARRAYLIST上使用泛型

    目录 1.什么是泛型 2.泛型写法 3. 特性 1.什么是泛型 什么是泛型 在讲解什么是泛型之前,我们先观察Java标准库提供的ArrayList,它可以看作"可变长度"的数组,因 ...

  7. java各种符号用法_java“与”符号写法与用法

    java"与"符号写法与用法 java"与"符号怎么打出来的 java中"与"符号使用键盘上的 Shift + 数字7 即可打出来.(不是小 ...

  8. JAVA数据结构--Arraylist

    思维导图 声明arraylist,添加元素,取出元素 若声明Arraylist时使用了泛型.则只能添加对应的数据类型 Arraylist <String> =new .... 泛型的尖括号 ...

  9. 【数据结构-JAVA】ArrayList

    目录 1. 线性表 2. 顺序表(ArrayList) 2.1 什么是顺序表? 2.2 顺序表的使用 2.2.1 ArrayList 的构造方法 2.2.2 ArrayList 的常规操作 2.2.3 ...

最新文章

  1. Django博客系统项目需求分析
  2. AutoIt3(AU3)开发的智能驱动安装工具,用于系统封装,支持参数静默启动
  3. java 延迟加载_hibernate延迟加载(懒加载)教程讲解
  4. dubbo之分组聚合
  5. 从volume表的host字段开始学习RPC
  6. curl实现发送Get和Post请求(PHP)
  7. sqlserver201无效的许可证书_sql提示无效数字
  8. Swift -- AVPlayerViewController播放本地视频并且通知重复播放
  9. m3u8播放器-DPlayer,P2P加速 记忆播放
  10. 机器视觉(9)搞懂机器视觉基本内容,这份PPT就够了!
  11. 七大行星排列图片_八大行星排列顺序(八大行星排列顺序图)
  12. 总结jQuery中的DOM节点属性
  13. 大学计算机作业互评评语简短,同学作业互评评语
  14. 我的世界服务器武器修改伤害,我的世界改伤害指令 | 手游网游页游攻略大全
  15. Focal loss 和 GHM
  16. 【ORACLE】错误代码大全
  17. 用Python登陆新版正方教务系统获取课程表(及RSA加密密码实现)
  18. 机器学习之-数学基本函数(幂函数)
  19. 软件架构-解密电商系统-互联网BAT商品详情缓存架构
  20. 汽车电子MCU开发之路

热门文章

  1. 机器学习——信用卡反欺诈案例
  2. Airbnb产品数据分析
  3. 管理团队需要的能力和技术
  4. Python程序设计(下)
  5. Composer下载以及安装
  6. 高通4G全网通骁龙410系列-MSM8916(M9+) ( Cortex-A53架构)
  7. 如何修改 gitlab 的项目名称
  8. writing idiomatic python翻译
  9. android然后让list刷新到底部,Android笔记之:App列表之下拉刷新的使用
  10. 第四十章 SQL命令 DROP USER