//static代码块也叫静态代码块,作用是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。
//如果是普通代码块,每创建一个对象,就执行。
//类什么时候会被加载
//1.创建对象实例时new
//2.创建子类对象实例,父类也会被加载
//3.使用类的静态成员时(静态属性,静态方法)
//类的加载顺序:超类的静态变量和代码块-父类的静态变量和代码块-子类的静态变量和代码块
//-非静态变量和代码块-超类的构造器-父类的非静态变量和代码块-父类的构造器-子类非静态变量和代码块-子类的构造器
public class CodeBlockDetail01 {
public static void main(String[] args) {
//类被加载的情况举例
//1.创建对象实例时(new)
//AA aa = new AA();
//2.创建子类对象实例,父类也会被加载,而且父类先被加载,子类后被加载
//AA aa2 = new AA();//输出BB的静态代码块1被执行
// 输出AA的静态代码块1被执行
//3.使用类的静态成员时(静态属性,静态方法)
//System.out.println(Cat.n1); //输出Cat的静态代码块1被执行 999
System.out.println(DD.n1);//8888,DD的静态代码块1被执行,没创建对象所以普通代码块没有执行
}
}
class Cat{
public static int n1 = 999;//静态属性
//静态代码块
static{
System.out.println("Cat的静态代码块1被执行");
}
}
class AA extends BB{//子类继承父类
//静态代码块
static{
System.out.println("AA的静态代码块1被执行");
}
}
class BB{//父类
//静态代码块
static{
System.out.println("BB的静态代码块1被执行");
}
}
class DD{
public static int n1 = 8888;//静态属性
//静态代码块
static{
System.out.println("DD的静态代码块1被执行");
}
//普通代码块,在new对象时,被调用,而且每创建一个对象,就调用一次
//可以这样简单的理解,普通代码块是构造器的补充
{
System.out.println("DD的代码块被执行");
}
}
//小结1,static 代码块是类加载时,执行只会执行一次
// 2,普通代码块在创建对象调用时,创建一次,调用一次
// 3,类加载三种情况
类加载的情况
最新推荐文章于 2023-09-06 17:57:10 发布