创建一个对象的执行顺序如下:
不存在父类 1) 静态成员显示初始化 2) 静态代码块 3) main函数(如果存在main函数的话) 4) 成员变量初始化 5) 初始化代码块 6) 构造函数
其中1)与2) 以及4)与5)的顺序可以相反,初始化顺序按照代码的先后顺序执行,但是变量还是在最先定义的,但是该变量必须是基本变量,并且在(静态)初始化代码块中只能进行初始化,不能进行调用,且初始化的顺序为代码书写的先后顺序;如果是一个引用,必须在定义在静态初始化代码块前,
存在父类
1)父类静态成员显示初始化 2)父类静态代码块 3)子类静态成员显示初始化 4)子类静态代码块 5)子类主函数(如果存在main函数的话) 6) 父类成员变量初始化 7) 父类初始化代码块 8) 父类构造函数 9) 子类成员变量初始化 10) 子类初始化代码块 11) 子类构造函数
关于显示初始化与代码块初始化的问题与不存在父类中的问题一致
验证的代码如下:
public class Test2 extends Person{ public String name; public static boolean flag; public static String address; //必须定义在 { System.out.println("这是初始代码块_ TEST2"); name = "hubin"; address = "杭州市"; age = 19; System.out.println("name" + name + "\t address" + address); System.out.println("===============初始代码块END _ TEST2======================"); } static{ System.out.println("这是静态代码初始快_ TEST2"); address = "平湖市"; p = 10; System.out.println("address" + address); System.out.println("===============静态代码初始快 _ TEST2======================"); } public static int p; public int age = 20; public Test2(){ System.out.println("这是构造函数_ TEST2"); name = "hubin_constrator"; address = "杭州市_constrator"; System.out.println("name" + name + "\t address" + address); System.out.println("================构造函数 _ TEST2====================="); } public static void main(String [] args){ System.out.println("=================主函数Start _ TEST2=================="); Test2 test = new Test2(); // Person person = new Person(); System.out.println("=================主函数End _ TEST2===================="); } } class Person { public String name; public static boolean flag; public static String address; { System.out.println("这是初始代码块_person"); name = "hubin"; address = "杭州市"; System.out.println("name" + name + "\t address" + address); System.out.println("================初始代码块_person====================="); } static{ System.out.println("这是静态代码初始快_person"); address = "平湖市"; System.out.println("address" + address); System.out.println("=================静态代码初始快_person===================="); } public Person(){ System.out.println("这是构造函数_person"); name = "hubin_constrator"; address = "杭州市_constrator"; System.out.println("name" + name + "\t address" + address); System.out.println("===============构造函数_person======================"); } }转载于:https://www.cnblogs.com/jinxiuze/p/7806125.html
