一、使用场景

在Java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。

二、原则

1️⃣变量优先于块、静态优先于非静态。
2️⃣父类优先于派生类初始化。
3️⃣按照成员变量定义的顺序来进行初始化,即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造器)被调用前初始化。

三、初始化顺序

先父后子,变量优于块,静态优于非静态

  1. 父类静态变量
  2. 父类静态代码块
  3. 子类静态变量
  4. 子类静态代码块
  5. 父类非静态变量
  6. 父类非静态代码块
  7. 父类构造函数
  8. 子类非静态变量
  9. 子类非静态代码块
  10. 子类构造函数

四、初始化示例代码

public class InitOrderDemo {public InitOrderDemo() {System.out.println("父类构造方法");}String b = "父类非静态变量";{System.out.println(b);System.out.println("父类非静态代码块");}static String a = "父类静态变量";static {System.out.println(a);System.out.println("父类静态代码块");}public static void superMethod() {System.out.println("父类普通静态方法");}
}
public class Derived extends InitOrderDemo {public Derived() {System.out.println("子类构造方法");}String b = "子类非静态变量";{System.out.println(b);System.out.println("子类非静态代码块");}static String a = "子类静态变量";static {System.out.println(a);System.out.println("子类静态代码块");}public static void derivedMethod() {System.out.println("子类普通静态方法");}public static void main(String[] args) {//        InitOrderDemo.superMethod();Derived.derivedMethod();
//        new Derived();}
}

分别执行主函数里的三条指令,执行结果如下。

1️⃣InitOrderDemo.superMethod();

父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类普通静态方法

2️⃣Derived.subMethod();

父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
子类普通静态方法

3️⃣new Derived();

父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类非静态变量
父类非静态代码块
父类构造方法
子类非静态变量
子类非静态代码块
子类构造方法

Java程序的初始化顺序相关推荐

  1. java 程序的初始化顺序是怎样的?

    [0]README 1)本文 转自" java 程序员面试笔试宝典", 这个书有点意思: [1]java程序初始化遵循三个原则(rule) r1)静态变量 优先于 非静态变量: r ...

  2. 彻底搞懂java程序的初始化顺序

    使用场景 在java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象. 原则 变量优先于块.静态优先于非静态. 父 ...

  3. java创建对象 的初始化顺序

    java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...

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

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

  5. Java 类的初始化顺序

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

  6. android 初始化类,Android 常用编程技巧/Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)...

    1.设置屏幕的亮度: WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.screenBrightness=1.0f; getW ...

  7. java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈

    Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...

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

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

  9. JAVA类加载与初始化顺序

    类的生命周期 7个阶段依次为:Loading Verification Preparation Resolution Initialization Using Unloading 类加载的双亲委派模型 ...

最新文章

  1. 简单了解音视频传输协议SDP、RTP、RTMP、SIP等
  2. android 人生日历,android版人生日历日子怎么用 安卓版人生日历日子使用教程
  3. 深入理解volatile
  4. 折纸机器人的步骤图解_折纸图解老虎
  5. Couchbase 介绍 - 更好的 Cache 系统
  6. css垂直居中如何实现
  7. memcached使用详解
  8. 《算法与数据结构专场》BitMap算法介绍
  9. IT第三阶段?“智慧的运算”的未解之谜
  10. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
  11. BigTable的开源实现:HBase数据库
  12. 安卓rom制作教程_OPPO Reno安卓9系统如何升级ColorOS6.7最新版本-安卓10系统
  13. 视频教程-微信小程序开发实战第三季-微信开发
  14. 带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统
  15. 成吉思汗1怀旧版 一键端 win服务端
  16. dell刷sn_像API一样地通过Dell设备SN号自动获取准确的设备型号
  17. html视频标签略缩图,JavaScript截取video标签视频缩略图 方法1
  18. python excel 饼图 简书_Python实现绘画多个饼图
  19. 高管激励的有效手段----股权激励
  20. c# 桌面录屏,生成视频方案总结

热门文章

  1. bash 剪切文件_linux 剪切命令
  2. MySQL 备份与恢复 实验示例
  3. mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc
  4. 钉钉outgoing机器人开发
  5. Uos窗管开发IDE介绍.VSCode
  6. CSLA超级公链全力打造行业标杆—csla超级公链是什么东西
  7. 解决windows本地磁盘图标不显示、异常
  8. 二叉树的概念、分类和性质
  9. 【AR技术:带你走进虚拟与现实的交集】
  10. 计算机图形学入门(GAMES101)总结01