static代码块与{}代码块的比较
第一个例子:
public class StaticDemo {
{
System.out.println("{} 代码块");
}
static{
System.out.println("static 代码块");
}
public static void main(String[] args) {
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static 代码块
结论:类的加载会执行static代码块,不会执行{}代码块。
第二个例子:
public class StaticDemo2 {
{
System.out.println("{} 代码块");
}
static{
System.out.println("static 代码块");
}
public static void main(String[] args) {
new StaticDemo2();
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static 代码块 {} 代码块
结论: new一个类的实例,会先执行static代码块,再执行{}代码块。
第三个例子:
public class StaticDemo3 {
public StaticDemo3(){
System.out.println("构造函数");
}
{
System.out.println("{} 代码块");
}
static{
System.out.println("static 代码块");
}
public static void main(String[] args) {
new StaticDemo3();
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static 代码块 {} 代码块 构造函数
结论:new一个类的实例,会先执行static代码块,再执行{}代码块,最后执行构造函数。
第四个例子:
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();
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static 代码块 {} 代码块 构造函数 {} 代码块 构造函数
总结:static{}代码块,会在类初次被加载的时候被执行一次。{}代码块和构造函数一样,每次new一个对象都会被执行。
注:当有多个带不同参数的构造函数需要执行相同的初始化代码,可以将这些代码提起出来放在{}代码块中。
作者:码农小陈
文中书写有误之处,欢迎批评指正。
欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
-------------------------------------------
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个 [推荐]哦,博主在此感谢!
关注我的公众号《码农小陈》 更多精彩内容等着你
![](https://img2020.cnblogs.com/blog/708732/202005/708732-20200513231646917-571258472.jpg)