动静态代码块分析
动态代码块
- 初始化代码块 又称 动态初始化代码块
- 定义在类以内 方法以外的代码块{}
- 作用:创建对象时,按照和属性(实例变量)定义的先后 顺序
完成对属性初始化工作。
静态代码块
- 定义在类以内方法以外并且被static修饰的{}
- 作用:在类加载的时候,按照和静态属性定义的
先后顺序完成静态属性的初始化工作 - 类加载:
(1)JVM第一次使用一个类的时候,通过 classPath(类路径)找到所需要的类对应的 .class 文件, 读取并获取类对应信息(包名、类名、属性、构造方法、 成员方法、父类等信息),将类的信息保存到JVM内存中, 一个类类加载进行一次。
(2)第一次使用一个类:
a. 第一次调用类中静态成员(静态属性和静态方法)
b. 第一次创建一个类的对象:先进行类加载,再完成对象的 创建
c. 子类类加载 会 先 导致其父类进行类加载
注意:只是声明引用,不会导致类加载。
当子类创建对象时 要先加载父类再加载子类
之后进行对象的创建 先创建父类对象 再创建子类对象
根据属性与静态代码块的顺序进行对属性的更改
小编建议将动静态代码块结合super引用进行理解
对比加深印象