博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA基础2——类初始化相关执行顺序
阅读量:4321 次
发布时间:2019-06-06

本文共 1151 字,大约阅读时间需要 3 分钟。

类初始化相关执行顺序

几个概念说明

代码块的含义与作用

static静态代码块

  1. 一般用于初始化类中的静态变量。比如:给静态的数组或者list变量赋初值。使用static静态代码块进行初始化与直接在定义变量的时候初始化效果是一样的。
  2. static静态代码块其实完全可以看做是一个没有名字、没有参数、没有返回值的静态方法,这个静态方法会在main方法执行前执行,而且是主动执行的,不需要任何显示调用,除此之外它和普通的静态方法没有任何区别。

构造块(又称构造代码块)

  1. 没有static修饰的代码块;
  2. 主要用于普通变量的初始化。

类的初始化顺序

在一个独立的类中

优先按照如下的顺序执行初始化:

  1. 所有static修饰的全局变量(static、static final等)、静态代码块,按照代码顺序从上到下逐个执行一遍。
  2. 所有普通全局变量、普通代码块(又称为构造块、构造代码块),按照代码顺序从上到下逐个执行一遍。
  3. 构造函数。

如果new多个类对象,则只有第一个new对象的时候,会执行上述1中描述的代码初始化,后面new对象的时候,都只会执行2、3两个步骤。即:static修饰的静态变量、静态常量、静态代码块,在整个虚拟机生命周期中只会初始化一次

在子类中

对于子类的初始化,整体原则是优先执行父类的初始化,然后再执行子类的初始化,详细如下:

  1. 按照从最顶层父类逐层下钻,直到当前要初始化的子类的顺序,先将所有static修饰的全局变量(static、static final等)、静态代码块,按照代码顺序从上到下逐个执行一遍(即先执行父类中所有static相关代码,再执行子类中static相关代码)。
  2. 按照从最顶层父类逐层下钻,直到当前要初始化的子类的顺序,依次执行上述1个独立类初始化章节中提及的2、3步骤。

举个例子,class Child extends Parent,加载顺序如下:

  1. 加载Parent中所有的static相关代码;
  2. 加载Child中所有的static相关代码;
  3. 加载Parent中的普通变量或者普通代码块(又称为构造块、构造代码块);
  4. 加载Parent的构造函数;
  5. 加载Child中的普通变量或者普通代码块(又称为构造块、构造代码块);
  6. 加载Child中的构造函数。
    如果执行多次new对象操作,则从第二次new对象的时候,只会执行3、4、5、6四个步骤。

如果new多个类对象,则只有第一个new对象的时候,会执行上述1中描述的代码初始化,后面new对象的时候,都只会执行2步骤。即:static修饰的静态变量、静态常量、静态代码块,在整个虚拟机生命周期中只会初始化一次

转载于:https://www.cnblogs.com/veezean/p/7641805.html

你可能感兴趣的文章
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
小白的python进阶历程------05.占位符
查看>>
CF414BMashmokh and ACMDP
查看>>
Notepad++ 通过g++编译
查看>>
JAVA基础2——类初始化相关执行顺序
查看>>
转:Zend Framework 重定向方法(render, forward, redirect)
查看>>
Linux下查看磁盘与目录的容量——df、du
查看>>
关于日记app的思考
查看>>
使用sencha的cmd创建项目时提示找不到\Sencha\Cmd\repo\.sencha\codegen.json
查看>>
如何快速启动一个Java Web编程框架
查看>>
MSP430单片机存储器结构总结
查看>>
文本框过滤特殊符号
查看>>
教育行业安全无线网络解决方案
查看>>
7个杀手级的开源监测工具
查看>>
软件架构学习小结
查看>>
C语言实现UrlEncode编码/UrlDecode解码
查看>>
返回用户提交的图像工具类
查看>>