java类的初始化顺序
来源:互联网 发布:鼎捷软件股票 编辑:程序博客网 时间:2024/06/10 22:36
java类的初始化顺序
java类的初始化顺序常会出现在java的笔试和面试题中,本文将通过实践代码对java类的初始化顺序做个分析!
首先结论话语放前面,java类的初始化顺序依次如下:
1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行,且每创建一个对象就执行一次。
4.执行父类的构造方法。
5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行,且每创建一个对象就执行一次。
6.执行子类的构造方法。
演示实例1:
public class ClassInitOrder {public static void main(String[] args) {Child c1 = new Child();}}class Father{static {System.out.println("Father的static块……");}//初始化块{System.out.println("Father的初始化块……");}//构造方法public Father(){System.out.println("Father的构造方法被调用……");}}class Child extends Father{static {System.out.println("Child的static块……");} //初始化块{System.out.println("Child的初始化块……");} //构造方法public Child(){System.out.println("Child的构造方法被调用……");}}
程序结果:
从结果可以看出,类在初始化的时候,顺序是:
静态成员-->初始化块-->构造方法,然后按照这个顺序,父类与子类依次执行,即先父类的静态成员,再子类静态成员,接着父类初始化块,再子类初始化块,依此类推……
演示实例2:
public class ClassInitOrder {public static void main(String[] args) {Child c1 = new Child();Child c2 = new Child();}}class Child{static {System.out.println("Child的static块……");}{System.out.println("Child的初始化块……");}public Child(){System.out.println("Child的构造方法被调用……");}}
程序结果:
从结果可以看出,static块在在整个程序运行过程中,只执行一次,即static块是针对类的,不是针对对象的,static块或者说static的成员,在程序运行时第一次被访问的时候(该类的第一个对象被创建时)只初始化一次,之后不再执行;而初始化块是针对对象的,每创建一个对象,就执行一次。
演示实例3:
public class ClassInitOrder {public static void main(String[] args) {Child c1 = new Child();}}class Child{static int a, b = 3;static {a++;System.out.println("a = " + a);}static {a = b;System.out.println("a = " + a);}}
结果:
把两个static块位置换一下
public class ClassInitOrder {public static void main(String[] args) {Child c1 = new Child();}}class Child{static int a, b = 3;static {a = b;System.out.println("a = " + a);}static {a++;System.out.println("a = " + a);}}
结果:
从结果可以看出,当类中存在多个static块或者static成员时,按照他们在程序中出现的顺序依次执行!
希望对读者有帮助,转载请注明出处!
0 0
- java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- Java类的初始化顺序
- java类初始化的顺序
- java类的初始化顺序
- Java类的初始化顺序
- java 类的初始化顺序
- Java类的初始化顺序
- java类的初始化顺序
- java类的初始化顺序
- JAVA类的初始化顺序
- Java类的初始化顺序
- java类的初始化顺序
- java 类的初始化 顺序
- java类的初始化顺序
- java类的初始化顺序
- HDU 1022 Train Problem I
- 安卓异常android.widget.TextView cannot be cast to android.widget.Button
- 希尔排序算法
- 硬盘变成RAW 修复
- invalid nib registered for identifier。。。nib must contain exactly one top level
- java类的初始化顺序
- C++实现单链表
- android在代码中设置View的属性
- 从误用TreeSet到思考Java有序集合对相等和顺序比较一致性的要求
- Putty 使用中出现的问题
- 折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。
- 2017 华东师范大学网赛 F.丽娃河的狼人传说( 贪心)
- 子元素上的margin作用到了父元素上
- [设计模式]观察者模式(Observer)