前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >static静态代码块加载和执行

static静态代码块加载和执行

作者头像
IT云清
发布2019-01-22 15:10:26
5390
发布2019-01-22 15:10:26
举报
文章被收录于专栏:IT云清IT云清

静态代码块,非静态代码块,无参构造,有参构造,这些代码片段分别在什么时候加载执行?

1.父类Father

代码语言:javascript
复制
package com.java4all.test10;
public class Father {

    static {
        System.out.println("father的静态代码块");
    }

    {
        System.out.println("father的非静态代码块");
    }

    public Father() {
        System.out.println("father的构造方法");
    }

}

2.子类Son

代码语言:javascript
复制
package com.java4all.test10;
public class Son extends Father{

    static {
        System.out.println("son的静态代码块");
    }

    {
        System.out.println("son的非静态代码块");
    }

    public Son() {
        System.out.println("son的构造方法");
    }

}

3.测试类

代码语言:javascript
复制
package com.java4all.test10;
public class Test1 {
    public static void main(String[] args){
        System.out.println("创建son对象前");
        Son son = new Son();
        System.out.println("创建son对象后");
    }
}

结果:

代码语言:javascript
复制
创建son对象前
father的静态代码块
son的静态代码块
father的非静态代码块
father的构造方法
son的非静态代码块
son的构造方法
创建son对象后

4.如果父类没有无参构造,只有有参构造

这种情况,子类需要在构造方法中显示的调用父类的有参构造

父类

代码语言:javascript
复制
public class Father {

    static {
        System.out.println("father的静态代码块");
    }

    {
        System.out.println("father的非静态代码块");
    }

    //public Father() {
    //    System.out.println("father的构造方法");
    //}

    public Father(Integer a) {
        System.out.println("father的带参构造方法");
    }

}

子类

代码语言:javascript
复制
public class Son extends Father{

    static {
        System.out.println("son的静态代码块");
    }

    {
        System.out.println("son的非静态代码块");
    }

    public Son() {
        //父类没有无参,只有有参,需要显示调用父类的有参构造
        super(5);
        System.out.println("son的构造方法");
    }

    public Son(Integer a) {
        //父类没有无参,只有有参,需要显示调用父类的有参构造
        super(5);
        System.out.println("son的带参构造方法");
    }
}

结果:

代码语言:javascript
复制
创建son对象前
father的静态代码块
son的静态代码块
father的非静态代码块
father的带参构造方法
son的非静态代码块
son的构造方法
创建son对象后

5.如果父类没有无参构造,也没有有参构造

子类的构造只管自己就好,不用管父类的构造了。

6.总结

总的来说,按照如下的大顺序调用: 父类静态代码块 子类静态代码块

父类非静态代码块 父类构造函数

子类非静态代码块 子类构造函数

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.父类Father
  • 2.子类Son
  • 3.测试类
  • 4.如果父类没有无参构造,只有有参构造
    • 这种情况,子类需要在构造方法中显示的调用父类的有参构造
    • 5.如果父类没有无参构造,也没有有参构造
      • 子类的构造只管自己就好,不用管父类的构造了。
      • 6.总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档