第一个例子:
public class StaticDemo { { System.out.println("{} 代码块"); } static{ System.out.println("static 代码块"); } public static void main(String[] args) { } }
static 代码块
结论:
类的加载会执行static代码块,不会执行{}代码块。
第二个例子:
public class StaticDemo2 { { System.out.println("{} 代码块"); } static{ System.out.println("static 代码块"); } public static void main(String[] args) { new StaticDemo2(); } }
static 代码块 {} 代码块
结论:
new一个类的实例,会先执行static代码块,再执行{}代码块。
第三个例子:
<span style="font-size:14px;">public class StaticDemo3 { public StaticDemo3(){ System.out.println("构造函数"); } { System.out.println("{} 代码块"); } static{ System.out.println("static 代码块"); } public static void main(String[] args) { new StaticDemo3(); } }</span>
static 代码块 {} 代码块 构造函数
结论:
new一个类的实例,会先执行static代码块,再执行{}代码块,最后执行构造函数。
第四个例子:
<span style="font-size:14px;">public class StaticDemo4 { public StaticDemo4(){ System.out.println("构造函数"); } { System.out.println("{} 代码块"); } static{ System.out.println("static 代码块"); } public static void main(String[] args) { new StaticDemo4(); new StaticDemo4(); } }</span>
static 代码块 {} 代码块 构造函数 {} 代码块 构造函数
总结:
static{}代码块,会在类初次被加载的时候被执行一次。{}代码块和构造函数一样,每次new一个对象都会被执行。
注:当有多个带不同参数的构造函数需要执行相同的初始化代码,可以将这些代码提起出来放在{}代码块中。