问答详情
源自:9-4 Java 中的继承初始化顺序

初始化问题

//主函数
package com.java.CarRent;

public  class Initial {
    public static void main(String[] args) {
        Son s=new Son();


    }
}

//Parent 类
package com.java.CarRent;

public class Parent {
    {
        System.out.println("A");
    }
    static{
        System.out.println("B");
    }
    public Parent(){
        System.out.println("C");
    }
}
//Son 类


package com.java.CarRent;

public class Son extends Parent{
    {
        System.out.println("D");
    }
    static{
        System.out.println("E");
    }

    public Son(){
        System.out.println("F");
    }

    }



//能不能解释一下答案 ,关键是其中的static初始化没理解

https://img3.mukewang.com/5b1dd8a30001e53205780351.jpg

提问者:qq_千界_0 2018-06-11 10:04

个回答

  • qq_心态_3
    2018-06-11 11:26:15
    已采纳


    在一个不存在继承的类中:初始化static变量,执行static初始化快-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法

    在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普通初始化块-->子类构造方法。

    注意:其中变量初始化(赋值)和初始化块的执行与相关语句在源码中的放置顺序一致,不过变量声明会最先执行


  • 风一直在吹
    2018-07-31 01:20:10

    不懂的{}这个的,再补充下刚弄懂

    static{...}是静态块,而只有{...}的是叫做构造块。

        静态块在一个程序里面只执行一次;

        而构造块是,只要建立一个对象,构造代码块都会执行一次。

        静态块优先于主方法的执行,静态块优先于构造快,然后是构造方法的执行,而且只执行一次!