静态代码块 : 在类被加载的时候就运行,只会运行一次,优先与各种代码块和构造方法。
有多个静态代码块时,按照书写顺序执行。如项目启动所需要加载的配置息
的配置文件都可以放在静态代码块中执行
实例初始化代码块:在创建对象的时候被调用,每创建一次都执行一次,优先于构造方法,可以统 计创建对象的次数。
构造方法: 1.构造函数名字与类名相同 2.没有返回值 3.new的时候才会调用
普通代码块: 在方法里面写的代码块
public class demo {
public demo() {
System.out.println("执行了构造方法");
}
static {
System.out.println("执行了静态代码块");
}
{
System.out.println("执行了构造代码块");
}
public static void main(String[] args) {
System.out.println("执行了main方法");
new demo();
new demo();
}
}
执行顺序:
执行了静态代码块
执行了main方法
执行了构造代码块
执行了构造方法
执行了构造代码块
执行了构造方法
有继承关系时
先执行父类静态代码块
再执行子类静态代码块
再执行父类实例初始化代码块
再执行父类构造方法
再执行子类实例初始化代码块
再执行子类构造方法
为什么声明在后面不报错?
因为在执行静态代码块之前,会先扫描全局,给静态变量初始值,再执行静态代码块