Java中的实例初始化块
如下代码示例
public class Hello {
private static final Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(0, "first");
put(1, "second");
put(2, "third");
}
};
}
这种初始化HashMap
的方法怎么和平常不一样,双花括号是什么鬼?
如果你知道匿名内部类,那么你肯定知道new HashMap(){}
这是匿名内部类的写法,那么第一层意思就明晰了,然后再看第二层,里面的花括号是什么意思?
再看一下如下的一段代码,可能就大概了解了。
public class Hello {
static {
System.out.println("静态代码块");
}
{
System.out.println("初始化块");
}
}
一个类里面可以添加静态代码块,还可以添加实例代码块,第一个static
修饰的就是静态代码块,第二则为实例代码块。
再来看一下它们的执行顺序。
public class Hello {
static {
System.out.println("静态代码块");
}
{
System.out.println("初始化块");
}
public Hello() {
System.out.println("构造方法");
}
public static void main(String[] args) {
new Hello();
System.out.println("***************");
new Hello();
}
}
输出的结果为
静态代码块
初始化块
构造方法
***************
初始化块
构造方法
可以看到,static
修饰的静态代码块只执行了一次,而实例代码块每次新建实例都会被执行一次,顾名思义,实例代码块肯定是与实例相关的嘛,所以才会每次实例化后都被执行。另外,不管是实例代码块,还是静态代码块,都是在构造函数执行之前得到执行的。
所以,再回到上面的第一段代码,就会发现,原来这就是用来初始化一个HashMap
,并且在每次实例化之前,都向HashMap
中的添加一些内容,大概就是这样子了。
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=1256