类的初始化顺序(一)

xiaoxiao2021-02-28  134

概述:

属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序: 1.父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。 4.执行父类的构造方法。 5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。 6.执行子类的构造方法。

所以一个类的执行顺序总体可以分为三类:静态成员和静态初始化块,实例成员和实例初始化块,构造方法。

首先,先举几个简单的例子。 例一:main函数调用new AA();

public class AA { private static String s = print("静态成员变量"); private String s1 = "成员变量"; static { System.out.println("静态初始化块"); } { System.out.println("初始化块"); } public AA(){ System.out.println("无参构造函数"); } private static String print(String str){ System.out.println("静态方法块"); return str; } }

结果:

静态方法块 静态初始化块 初始化块 无参构造函数

例二:

main函数调用new son();

class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println("父类代码块初始化" ); } private static String s=print(); public static String print() { System. out.println("父类静态方法" ); return "父类静态成员变量的初始化" ; } public Father() { System. out.println("父类无参构造函数初始化完成" ); show(); } public void show() { System. out.println("父类show()方法" ); } } class Son extends Father { static{ System. out.println("子类静态代码块初始化" ); } { System. out.println("子类代码块初始化" ); } private static int i=1; private String s="子类私有成员变量" ; public void show() { System. out.println("子类show()方法:i=" +i); } public Son() { System. out.println("子类构造函数初始化完成" ); show(); } }

结果:

父类静态代码块初始化 父类静态方法 子类静态代码块初始化 父类代码块初始化 父类无参构造函数初始化完成 子类show()方法:i=1 子类代码块初始化 子类构造函数初始化完成 子类成员变量初始化完成:s=子类私有成员变量 子类show()方法:i=1

注意:父类的构造函数中show()实际调用的应该是子类的show方法。

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

最新回复(0)