转载自 https://blog.csdn.net/sujz12345/article/details/52590095

<init>与<clinit>
<init>
Java在编译之后会在字节码文件中生成<init>方法,称之为实例构造器,该实例构造器会将语句块,变量初始化,调用父类的构造器等操作收敛到<init>方法中,收敛顺序(这里只讨论非静态变量和语句块)为: 
1. 父类变量初始化 
2. 父类语句块 
3. 父类构造函数 
4. 子类变量初始化 
5. 子类语句块 
6. 子类构造函数

所谓收敛到<init>方法中的意思就是,将这些操作放入到<init>中去执行

<clinit> 
Java在编译之后会在字节码文件中生成<clinit>方法,称之为类构造器,类构造器同实例构造器一样,也会将静态语句块,静态变量初始化,收敛到<clinit>方法中,收敛顺序为: 
1. 父类静态变量初始化 
2. 父类静态语句块 
3. 子类静态变量初始化 
4. 子类静态语句块

<clinit>方法是在类加载过程中执行的,而<init>是在对象实例化执行的,所以<clinit>一定比<init>先执行。所以整个顺序就是: 
1. 父类静态变量初始化 
2. 父类静态语句块 
3. 子类静态变量初始化 
4. 子类静态语句块 
5. 父类变量初始化 
6. 父类语句块 
7. 父类构造函数 
8. 子类变量初始化 
9. 子类语句块 
10. 子类构造函数

初始化顺序
如下父类代码

public class Parent {static int a = 1;int b = 1;static {System.out.println("parent static block(a):" + (++a));}{System.out.println("parent  block(b):" + (++b));}public Parent() {System.out.println("parent construction");}
}

子类代码

public class Child extends Parent {static int a = 1;int b = 1;static {System.out.println("child static block(a):" + (++a));}{System.out.println("child  block(b):" + (++b));}public Child() {System.out.println("child construction");}public static void main(String[] args) {new Child();}
}

最终输出结果为

parent static block(a):2
child static block(a):2
parent  block(b):2
parent construction
child  block(b):2
child construction

Java的,与类的初始化顺序相关推荐

  1. java基础之——类的初始化顺序(转载)

    原文地址:http://www.cnblogs.com/chrischennx/p/3612295.html 由浅入深,首先,我们来看一下,一个类初始化有关的都有些啥米: 静态成员变量.静态代码块.普 ...

  2. Java和Kotlin类的初始化顺序

    Java Java程序初始化的顺序:父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> ...

  3. java类成员初始化_简单了解Java类成员初始化顺序

    这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...

  4. Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  5. java类的静态成员初始化_Java类的初始化顺序 (静态变量、静态初始化块、变量、初始......

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  6. Java 类的初始化顺序

    Java 类的初始化顺序 Java中类的初始化顺序是:父类静态代码块-->子类静态代码块-->父类非静态代码块-->父类构造器-->子类非静态代码块-->子类构造器. 测 ...

  7. java 初始化参数_JAVA类的初始化顺序与initialize参数

    JAVA类的初始化顺序依次是:(静态变量.静态初始化块)->(变量.初始化块)->构造函数, 相同级别的以定义顺序为准,  且静态变量和静态初始化块只初始化一次.通过下面的代码来验证. p ...

  8. Java类的初始化顺序

    对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器. 初始化顺序图示: 我们也可以通过下面的测试代码来验证这一 ...

  9. java类初始化顺序_Java 类的初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行 执行顺序优先级:静态块,main(),构造块,构造方法 1. 构造函数 publi ...

最新文章

  1. CISCO IP nat 常用命令及原理详解
  2. 工作三年,我没给家里一分钱,还把家里掏空了
  3. python合成语音_MicroPython动手做(25)——语音合成与语音识别
  4. boost_1_48_0 在VS2008下的安装 Boost.Asio安装
  5. java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间
  6. 备份自己的myeclipse快捷键到需要的环境
  7. Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
  8. 软件测试(分类,方法,工具)
  9. 获取Map集合中数据的方法
  10. Windows Server 2012中的多元密策略
  11. 2022百度之星程序设计大赛 - 复赛 1003 最大值
  12. IDEA 导入项目 导入不进去
  13. android 插件开发 过时,Android Sutdio ( Intelij ) 插件开发
  14. SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用
  15. C++编写库文件以及调用
  16. FP7195大功率零压差全程无频闪调光DC-DC恒流芯片(兼容调光器:PWM调光,无极调光,0/1-10V调光)
  17. 过敏性鼻炎、感冒、哮喘
  18. 无线网络连接后总是提示可能需要其他登陆信息
  19. Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)
  20. 使用springer nature模板页眉显示标题太长超出页面解决

热门文章

  1. HDU4267(2012长春网络赛)
  2. 15.枚举enum.rs
  3. STL中的find_if函数
  4. (十)boost库之多线程
  5. 关于寻路算法的一些思考(4):A* 算法的变体
  6. Mission系统预览
  7. 消息中间件(Kafka/RabbitMQ)收录集
  8. 原来这才是日志打印的正确姿势!
  9. Go http client 连接池不复用的问题
  10. 技术实战 —— 快速实现语聊房搭建