知识点
- 静态属性和静态代码块
按代码中定义先后顺序执行
这两者优于其他顺序
都只是在类初始化的时候,加载一次 - 非静态属性和普通代码块
按代码中定义先后顺序执行
在构造函数之前执行
每次新建对象的时候,都会执行 - 构造函数
总结:
- 静态属性和静态方法,是在类初始化阶段执行的,属于 “类”这个级别的,只加载一次
- 非静态属性、普通代码块和构造函数,属于“对象”级别的,每次新建对象都会加载一次
例子:
public class Test {
public static void main(String[] args) {
Zi z1 = new Zi();
System.out.println("----------------------------");
Zi z2 = new Zi();
}
}
class Fu{
private static Fu f1 = new Fu(); //Fu的静态属性
private Other other = new Other(); //Fu的非静态属性
public Fu(){
System.out.println("Fu的构造函数");
}
static{
System.out.println("Fu的静态代码块");
}
{
System.out.println("Fu的普通代码块");
}
}
class Zi extends Fu{
private static Zi z1 = new Zi(); //Zi的静态属性
public Zi(){
System.out.println("Zi的构造函数");
}
static{
System.out.println("Zi的静态代码块");
}
{
System.out.println("Zi的普通代码块");
}
}
class Other{
public Other(){
System.out.println("Other构造函数");
}
}
结果:
Other构造函数
Fu的普通代码块
Fu的构造函数
Fu的静态代码块
Other构造函数
Fu的普通代码块
Fu的构造函数
Zi的普通代码块
Zi的构造函数
Zi的静态代码块
Other构造函数
Fu的普通代码块
Fu的构造函数
Zi的普通代码块
Zi的构造函数
----------------------------
Other构造函数
Fu的普通代码块
Fu的构造函数
Zi的普通代码块
Zi的构造函数
结果分析: