首页 > 其他 > 详细

静态代码块----->非静态代码块-------->构造函数

时间:2020-03-20 11:40:02      阅读:50      评论:0      收藏:0      [点我收藏+]

AAAA.java

解析: AAAA类的中包含静态代码块,构造代码块,构造方法

package com.zhiyou100.static02;

public class AAAA {
    static {
        System.out.println("AAAA 静态代码块");
    }
    {
        System.out.println("AAAA 构造代码块");
    }
    public AAAA() {
        System.out.println("AAAA 构造方法");
    }
}

BBBB.java

解析: BBBB类的中包含静态代码块,构造代码块,构造方法,并且继承AAAA类

package com.zhiyou100.static02;

public class BBBB extends AAAA {
    static {
        System.out.println("BBBB 静态代码块");
    }
    {
        System.out.println("BBBB 构造代码块");
    }

    public BBBB() {
        System.out.println("BBBB 构造方法");
    }
}

CCCC.java

解析: CCCC类的中包含静态代码块,构造代码块,构造方法,并且继承BBBB类

package com.zhiyou100.static02;

public class CCCC extends BBBB {
    static {
        System.out.println("CCCC 静态代码块");
    }
    {
        System.out.println("CCCC 构造代码块");
    }

    public CCCC() {
        System.out.println("CCCC 构造方法");
    }
}

 

Main.class 

解释:主方法创建CCCC的对象

package com.zhiyou100.static02;

public class Main {

      static {
       System.out.println("main方法静态代码块");
    }

public static void main(String[] args) {
        System.out.println("Main 方法开始");
        CCCC cccc = new CCCC();
        System.out.println("Main 方法结束");
    }
    
}

 

结果:

分析: 运行main方法,首先会输出main方法的构造代码块,然后会输出"Main 方法开始",当我们创建CCCC类的时候,CCCC类继承BBBB类,BBBB又继承AAAA类,所以首先会运行AAAA类的静态代码块,然后输出BBBB的静态代码块,最后输出CCCC的静态代码块,因为静态代码块是在创建对象之前执行的,比构造方法块和构造方法之前执行,然后会创建CCCC类,但是CCCC类的构造方法中super()会调用BBBB类的构造方法,然后BBBB类的构造方法通过默认的super调用AAAA类的构造方法,但是在调用AAAA类的构造方法之前,会调用构造代码块,所以依次类推,当AAAA类的构造代码块和构造方法调用之后,会调用BBBB类的构造代码块和构造方法,最后调用CCCC类的构造代码块和构造方法,当对象创建成功以后,最后main方法结束

 

 

 

技术分享图片

 

静态代码块----->非静态代码块-------->构造函数

原文:https://www.cnblogs.com/wangxiucai/p/12530192.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!