为了账号安全,请及时绑定邮箱和手机立即绑定

初始化问题

//主函数
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://img1.sycdn.imooc.com//5b1dd8a30001e53205780351.jpg

正在回答

2 回答


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

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

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


5 回复 有任何疑惑可以回复我~
#1

qq_千界_0 提问者

非常感谢!
2018-06-11 回复 有任何疑惑可以回复我~

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

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

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

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

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

    


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530107    人
  • 解答问题       6086    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

初始化问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信