目录
代码块使用:
静态代码块随着类的加载而执行,非静态代码块创建对象时被执行。
类什么时候被加载:
1创建对象实例时(new)
2.创建子类对象实例,父类也会被加载
3.使用类的静态成员时(静态属性,静态方法)案例演示:A类extends B类的静态块
静态代码块和非静态代码块的特点:
1、 代码块的优先级比构造方法高。
2. 非静态代码块,在每次创建对象时,都会执行一次。
3. 静态代码块,只执行一次,并且在类加载的时候执行。
public class Test {
public static void main(String args[]) {
System.out.println(Xiao.name);//类加载,但未创建对象,所以直加载非静态代码块(非静态代码块只执行一次)
Xiao xiao01 = new Xiao("xx",22);//创建对象,所以执行非静态代码块
Xiao xiao02 = new Xiao("zz",22);//每创建一次对象,非静态代码块就会被执行一次
}
}
class Xiao{
public static String name = " "; //静态属性
private int age = 22;
public Xiao(String name, int age) {
this.age = age;
}
//静态代码块
static {
System.out.println("静态代码块");
}
//非静态代码块
{
System.out.println("非静态代码块");
}
}
/* 打印结果:
静态代码块
xx
非静态代码块
非静态代码块
*/
有继承关系时
创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:
1.父类的静态代码块和静态属性(优先级一样,按定义顺序执行)
2.子类的静态代码块和静态属性(优先级一样,按定义顺序执行)
3.父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
4.父类的构造方法
5.子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)子类的构造方法