Java程序初始化的顺序

xiaoxiao2021-02-28  44

Java程序的初始化一般遵循三个原则(优先级依次递减): (1)静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只执行一次,而非静态对象(变量)可能会初始化多次。 (2)父类优先于子类进行初始化。 (3)按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法(包括构造函数)被调用之前先初始化。

Java程序初始化工作可以在许多不同的代码块中来完成(例如静态代码块、构造函数等),它们执行的顺序如下:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。

下面Gd和大家一起看一个简单的程序:

class Fu{ static{ System.out.println("Fu static block"); } { System.out.println("Fu block"); } public Fu(){ System.out.println("Fu constructor"); } } public class Zi extends Fu{ static{ System.out.println("Zi static block"); } { System.out.println("Zi block"); } public Zi(){ System.out.println("Zi constructor"); } public static void main(String[] args){ new Zi(); } }

看了这个程序的输出结果,就会一目了然了:

Fu static blockZi static blockFu blockFu constructorZi block

Zi constructor

对比上面的规则,就会很容易记住这些规律了。

转载请注明原文地址: https://www.6miu.com/read-2631779.html

最新回复(0)