java初始化、执行顺序


代码块作用:用来初始化类、对象的信息


★ 执行过程:new了某类的新对象的时候

前提:某类需要先存在,即虚拟机jvm把某个类从硬盘上加载到内存【类加载到内存】
执行静态代码块,加载静态成员属性、静态方法普通方法


① 执行静态代码块【随着类的加载而执行】

如果有静态成员变量,也会执行,至于和静态代码块执行先后顺序看代码位置。

② 执行构造代码块【类加载完成后,开始创建对象。创建对象前,先创建对象的资源】

如果有普通成员变量,也会执行,至于和构造代码块执行先后顺序看代码位置。

③ 执行构造器,完成创建对象



★ 如果有继承关系:

① 执行父类、子类的静态代码块(静态资源)【随着类的加载而执行】

如果有静态成员变量,也会执行,至于和静态代码块执行先后顺序看代码位置。

父类静态代码块—>父类静态变量–>子类静态代码块–>子类静态变量
或者是:父类静态变量—>父类静态代码块–>子类静态变量–>子类静态代码


② 执行构造代码块【类加载完成后,开始创建对象。创建对象前,先创建对象的资源】

如果有普通成员变量,也会执行,至于和构造代码块执行先后顺序看代码位置。

③ 执行构造器,完成创建对象

父类代码块—>父类普通成员变量–>父类构造函数–>子类代码块–>子类普通成员变量–>子类构造器
或者是:父类普通成员变量–>父类代码块—>父类构造函数–>子类普通成员变量–>子类代码块–>子类构造器



总结:最先执行静态代码块(随着类的加载而执行),然后在执行构造器前,先执行构造代码

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...