Java 中 HashMap 初始化的另一种方式分析
发布时间:2021-12-11 13:28:20 所属栏目:教程 来源:互联网
导读:1、HashMap 初始化的文艺写法 2、推而广之 3、Java7:增加对 collections 的支持 4、文艺写法的潜在问题 5、执行效率问题 6、Refer: 如果你接触过不同的语言, 如果你接触过不同的语言,从语法和代码层面来说,Java 是一种不折不扣的臃肿、啰嗦的语言,从另
|
1、HashMap 初始化的文艺写法 2、推而广之 3、Java7:增加对 collections 的支持 4、文艺写法的潜在问题 5、执行效率问题 6、Refer: 如果你接触过不同的语言, 如果你接触过不同的语言,从语法和代码层面来说,Java 是一种不折不扣的“臃肿、啰嗦”的语言,从另一方面来说这种臃肿和啰嗦也体现了它严谨的一面,作为适合构建大型、复杂项目的理由之一。 1、HashMap 初始化的文艺写法 HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化: HashMap<String, String> map = new HashMap<String, String>(); map.put("Name", "June"); map.put("QQ", "4889983"); 看完这段代码,很多人都会觉得这么写太啰嗦了,对此,文艺青年一般这么来了: HashMap<String, String> map = new HashMap<String, String>() { { put("Name", "June"); put("QQ", "4889983"); } }; 嗯,看起来优雅了不少,一步到位,一气呵成的赶脚。然后问题来了,有童鞋会问:纳尼?这里的双括号到底什么意思,什么用法呢?哈哈,其实很简单,看看下面的代码你就知道啥意思了。 public class Test { /*private static HashMap<String, String> map = new HashMap<String, String>() { { put("Name", "June"); put("QQ", "4889983"); } };*/ public Test() { System.out.println("Constructor called:构造器被调用"); } static { System.out.println("Static block called:静态块被调用"); } { System.out.println("Instance initializer called:实例初始化块被调用"); } public static void main(String[] args) { new Test(); System.out.println("======================="); new Test(); } } output: Static block called:静态块被调用 Instance initializer called:实例初始化被调用 Constructor called:构造器被调用 ======================= Instance initializer called:实例初始化被调用 Constructor called:构造器被调用 Note:关于 static 的作用与用法如果不了解,请参考: http://www.linuxidc.com/Linux/2014-06/103541.htm 为什么 main 方法是 public static void? http://www.linuxidc.com/Linux/2014-06/103542.htm 设计模式之 Java 中的单例模式(Singleton) 也就是说第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。这个块之所以被叫做“实例初始化块”是因为它们被定义在了一个类的实例范围内。 编写高质量代码 改善Java程序的151个建议 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm Java 8简明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm Java对象初始化顺序的简单验证 http://www.linuxidc.com/Linux/2014-02/96220.htm Java对象值传递和对象传递的总结 http://www.linuxidc.com/Linux/2012-12/76692.htm Java对象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm 本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-06/103535.htm 上面代码如果是写在 Test 类中,编译后你会看到会生成 Test$1.class 文件,反编译该文件内容: D:eclipse_indigoworkspace_homeCDHJobsbinpvuv>jad -p Test$1.class // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.linuxidc.com // Decompiler options: packimports(3) // Source File Name: Test.java package pvuv.zhaopin; import java.util.HashMap; // Referenced classes of package pvuv.zhaopin: // Test class Test$1 extends HashMap // 创建了一个 HashMap 的子类 { Test$1() { // 第二个 {} 中的代码放到了构造方法中去了 put("Name", "June"); put("QQ", "4889983"); } } D:eclipse_indigoworkspace_homeCDHJobsbinpvuv> ![]() (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



浙公网安备 33038102330466号