Java程序的初始化顺序
一、使用场景
在Java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。
二、原则
1️⃣变量优先于块、静态优先于非静态。
2️⃣父类优先于派生类初始化。
3️⃣按照成员变量定义的顺序来进行初始化,即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造器)被调用前初始化。
三、初始化顺序
先父后子,变量优于块,静态优于非静态
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类非静态变量
- 父类非静态代码块
- 父类构造函数
- 子类非静态变量
- 子类非静态代码块
- 子类构造函数
四、初始化示例代码
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程序的初始化顺序相关推荐
- java 程序的初始化顺序是怎样的?
[0]README 1)本文 转自" java 程序员面试笔试宝典", 这个书有点意思: [1]java程序初始化遵循三个原则(rule) r1)静态变量 优先于 非静态变量: r ...
- 彻底搞懂java程序的初始化顺序
使用场景 在java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象. 原则 变量优先于块.静态优先于非静态. 父 ...
- java创建对象 的初始化顺序
java创建对象 的初始化顺序 1.初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化 ...
- java类成员初始化_简单了解Java类成员初始化顺序
这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...
- Java 类的初始化顺序
Java 类的初始化顺序 Java中类的初始化顺序是:父类静态代码块-->子类静态代码块-->父类非静态代码块-->父类构造器-->子类非静态代码块-->子类构造器. 测 ...
- android 初始化类,Android 常用编程技巧/Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)...
1.设置屏幕的亮度: WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.screenBrightness=1.0f; getW ...
- java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈
Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- JAVA类加载与初始化顺序
类的生命周期 7个阶段依次为:Loading Verification Preparation Resolution Initialization Using Unloading 类加载的双亲委派模型 ...
最新文章
- 简单了解音视频传输协议SDP、RTP、RTMP、SIP等
- android 人生日历,android版人生日历日子怎么用 安卓版人生日历日子使用教程
- 深入理解volatile
- 折纸机器人的步骤图解_折纸图解老虎
- Couchbase 介绍 - 更好的 Cache 系统
- css垂直居中如何实现
- memcached使用详解
- 《算法与数据结构专场》BitMap算法介绍
- IT第三阶段?“智慧的运算”的未解之谜
- python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
- BigTable的开源实现:HBase数据库
- 安卓rom制作教程_OPPO Reno安卓9系统如何升级ColorOS6.7最新版本-安卓10系统
- 视频教程-微信小程序开发实战第三季-微信开发
- 带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统
- 成吉思汗1怀旧版 一键端 win服务端
- dell刷sn_像API一样地通过Dell设备SN号自动获取准确的设备型号
- html视频标签略缩图,JavaScript截取video标签视频缩略图 方法1
- python excel 饼图 简书_Python实现绘画多个饼图
- 高管激励的有效手段----股权激励
- c# 桌面录屏,生成视频方案总结