Java基础--类变量初始化顺序
来源:互联网 发布:魔术笔软件 编辑:程序博客网 时间:2024/05/22 04:24
Java基础–类变量初始化顺序
以前总是碰到java类初始化的问题。今天自己跑了测试后,总结一下:
- 执行初始化父类的类变量和静态代码块(static block)。静态代码块和类变量初始化的执行顺序按照他们在代码中出现的持续排序
- 执行初始子类的类变量和静态代码块。和父类相同。
- 执行父类的构造函数(如果子类的构造函数没有显示调用super,则默认调用父类的无参构造函数。如果父类没有无参构造函数,则编译报错。)
- 初始化父类的实例变量:首先初始化,构造函数以外的实例变量,顺序按照在代码中出现的顺序相同。再初始化构造函数以内的实例变量,顺序和代码执行顺序相同。
- 执行子类的构造函数(super以后,如果显示调用的话)。
- 子类的实例变量初始化顺序和父类相同。
下面举例子:
package com.company;class Dummy { public Dummy(String s) { System.out.println(s); }}class SuperClass { public static Dummy DUMMY = new Dummy("super DUMMY"); static { System.out.println("Super static"); } public Dummy aDummy = new Dummy("super aDummy"); public Dummy bDummy; public SuperClass(String s) { System.out.println("super construct: " + s); cDummy = new Dummy("Super cDummy"); bDummy = new Dummy("Super bDummy"); } public SuperClass() { System.out.println("Super construct"); cDummy = new Dummy("Super cDummy"); bDummy = new Dummy("Super bDummy"); } public Dummy cDummy = null; public static Dummy dDummy = new Dummy("super dDummy"); public static Dummy eDummy; static { eDummy = new Dummy("super eDummy"); } public static Dummy fDummy = new Dummy("super fDummy"); public Dummy gDummy = new Dummy("gDummy");}class SubClass extends SuperClass { public static Dummy HDUMMY = new Dummy("hdummy"); Dummy iDummy = new Dummy("iDummy"); static Dummy jDummy = new Dummy("jDummy"); Dummy kDummy; public SubClass(String s) { super(s); System.out.println(); kDummy = new Dummy("kDummy"); } static Dummy lDummy = new Dummy("lDummy"); static Dummy mDummy; static { mDummy = new Dummy("mDummy"); nDummy = new Dummy("nDummy"); } static Dummy nDummy; static Dummy oDummy = new Dummy("oDummy");}public class Main { public static void main(String[] args) { SubClass subClass = new SubClass("hi"); }}
输出为:
super DUMMYSuper staticsuper dDummysuper eDummysuper fDummyhdummyjDummylDummymDummynDummyoDummysuper aDummygDummysuper construct: hiSuper cDummySuper bDummyiDummykDummy
0 0
- Java基础--类变量初始化顺序
- java类变量初始化顺序
- Java类变量初始化顺序
- java基础---静态变量,成员变量,局部变量及类的初始化顺序
- java变量初始化顺序
- java变量初始化顺序
- JAVA变量初始化顺序
- JAVA变量初始化顺序
- 【Java】变量初始化顺序
- Java变量初始化顺序
- java变量初始化顺序
- java变量初始化顺序
- Java 变量初始化顺序
- Java 变量初始化顺序
- java变量初始化顺序
- Java变量初始化顺序
- java变量初始化顺序
- java基础,静态变量,静态初始化块,初始化快,成员变量的初始化顺序
- 简单快捷地测试 JPush API
- [BZOJ3876][Ahoi2014]支线剧情
- warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:545)
- IOS-60-解决:iOS7 APP页面上下有黑色间距,屏幕变小
- 'python'不是内部或外部命令,也不是可运行程序或批处理文件
- Java基础--类变量初始化顺序
- 2016年蓝桥杯javaB省赛——压缩变换
- linux sed 命令
- solr入门之solr的拼写检查功能的应用级别尝试
- explode
- IOS9.0中Alert的创建
- linux awk 命令
- kconfig
- java学习笔记-面向对象(二)