1. 加载父类,执行静态代码(包括静态成员变量和静态代码块,从上到下执行)
    2. 加载子类,执行静态代码
    3. 初始化父类对象属性(非静态的成员变量初始化为0)
    4. 执行父类匿名代码块(非静态的成员变量的赋值语句和匿名代码块)
    5. 执行父类构造方法(构造方法中的语句)
    6. 初始化子类对象属性
    7. 执行子类匿名代码块
    8. 执行子类构造方法

    蓝色为创建对象时会执行的代码,黄底为父类执行的代码。

    当类加载结束后,不会再执行静态代码。

    1. package com.briup.day10;
    2. class Father {
    3. String fa = "fa";
    4. static String fb = "fb";
    5. static {
    6. System.out.print("1. Father static code ");
    7. System.out.println("and static var: " + fb);
    8. }
    9. {
    10. System.out.println("3. Father var: " + fa);
    11. System.out.println("4. Father lambda code");
    12. }
    13. public Father() {
    14. System.out.println("5. Father Constuctor");
    15. }
    16. }
    17. class Son extends Father {
    18. String sa = "sa";
    19. static String sb = "sb";
    20. static {
    21. System.out.print("2. Son static code ");
    22. System.out.println("and static var: " + sb);
    23. }
    24. {
    25. System.out.println("6. Son var: " + sa);
    26. System.out.println("7. Son lambda code");
    27. }
    28. public Son() {
    29. System.out.println("8. Son Constuctor");
    30. }
    31. }
    32. public class StaticsTest {
    33. public static void main(String[] args) {
    34. new Son();
    35. System.out.println("--------");
    36. new Son();
    37. }
    38. }

    运行结果为:

    1. Father static code and static var: fb
    2. Son static code and static var: sb
    3. Father var: fa
    4. Father lambda code
    5. Father Constuctor
    6. Son var: sa
    7. Son lambda code
    8. Son Constuctor

    1. Father var: fa
    2. Father lambda code
    3. Father Constuctor
    4. Son var: sa
    5. Son lambda code
    6. Son Constuctor