类初始化顺序

一个类中包含如下几类东西,他们前后是有顺序关系的

静态属性:static 开头定义的属性
静态方法块: static {} 圈起来的方法块
普通属性: 未带static定义的属性
普通方法块: {} 圈起来的方法块
构造函数: 类名相同的方法
方法: 普通方法

初始化顺序

普通类:(无父类)

静态变量
静态代码块
普通变量
普通代码块
构造函数

继承的子类:

父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类普通变量
父类普通代码块
父类构造函数
子类普通变量
子类普通代码块
子类构造函数

抽象的实现子类: 接口 - 抽线类 - 实现类

接口静态变量
抽象类静态变量
抽象类静态代码块
实现类静态变量
实习类静态代码块
抽象类普通变量
抽象类普通代码块
抽象类构造函数
实现类普通变量
实现类普通代码块
实现类构造函数
接口注意:

声明的变量都是静态变量并且是final的,所以子类无法修改,并且是固定值不会因为实例而变化
接口中能有静态方法,不能有普通方法,普通方法需要用defalut添加默认实现
接口中的变量必须实例化
接口中没有静态代码块、普通变量、普通代码块、构造函数

推荐阅读更多精彩内容