类的初始化顺序(一)

来源:互联网 发布:税务师如何备考知乎 编辑:程序博客网 时间:2024/06/05 04:38

概述:

属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:
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方法。

原创粉丝点击