1、静态代码块
必须有static修饰,必须放在类下。与类一起加载执行。
格式:
static{
// 执行代码
}
特点:
- 每次执行类,加载类的时候都会先执行静态代码块一次。
- 静态代码块是自动触发执行的,只要程序启动静态代码块就会先执行一次。
- 作用:在启动程序之前可以做资源的初始化,一般用于初始化静态资源。
主方法中每创建一个对象,静态代码块只会在第一个对象创建时调用代码块。静态代码块只执行一次。
2、实例代码块
没有static修饰,必须放在类下。与对象初始化一起加载。
格式:
{
//执行代码
}
特点:
- 无static修饰。属于对象,与对象的创建一起执行的。
- 每次调用构造器初始化对象,实例代码块都要自动触发执行一次。
- 实例代码块实际上是提取到每一个构造器中去执行的。
- 作用:实例代码块用于初始化对象的资源。
案例:
public class Demo {
public static String name;
public Demo() {
//构造器
System.out.println("无参构造");
}
static {
name="李白";
System.out.println("静态代码块执行!");
}
{
System.out.println("实例代码块执行!");
}
public static void main(String[] args) {
Demo d1=new Demo();
Demo d2=new Demo();
}
}
结果:
静态代码块执行!
实例代码块执行!
无参构造
实例代码块执行!
无参构造
由此可见实例代码块先于无参构造执行。
静态代码块执行一次,实例代码块执行多次。