含有继承关系的父类、子类static代码块、普通代码块、构造函数加载的顺序

  • 程序入口在mian函数,会先检查mian函数所在类是否含有继承关系,如果有会逐步向上检查加载;
  • 结果(加载顺序):
  • 值得一提的是,System.out.println("------------加载顺序打印------------");这一句代码也是在static块加载、初始化之后才运行的。
  • static数据只在类第一次加载时执行,只执行一次,伴随类的加载而执行初始化操作。可以认为加载完类后的首个动作就是初始化static数据。
    • mian函数   
    • public static void main(String[] args){
              System.out.println("------------加载顺序打印------------");
              new Homework();
          }
  • 爷爷类的static块执行
    父类的static块执行
    子类的static块执行
    ------------加载顺序打印------------
    爷爷类的普通代码块执行
    爷爷类的无参构造方法执行
    父类的普通代码块执行
    父类的无参构造方法执行
    子类的普通代码块执行
    子类的无参构造方法执行

    加载顺序:父类静态代码块=》子类静态代码块=》父类普通代码块=》父类无参构造方法=》子类的普通代码块
    =》子类的无参构造方法

  • 测试的代码:
  • public class Homework extends Homework1{
        static {
            System.out.println("子类的static块执行");
        }
        {
            System.out.println("子类的普通代码块执行");
        }
        Homework(){
            System.out.println("子类的无参构造方法执行");
        }
    
        public static void main(String[] args){
            System.out.println("------------加载顺序打印------------");
            new Homework();
        }
    }
    class Homework1 extends HomeWork2{
        static {
            System.out.println("父类的static块执行");
        }
        {
            System.out.println("父类的普通代码块执行");
        }
        Homework1(){
            System.out.println("父类的无参构造方法执行");
        }
    }
    class HomeWork2{
        static {
            System.out.println("爷爷类的static块执行");
        }
        {
            System.out.println("爷爷类的普通代码块执行");
        }
        HomeWork2(){
            System.out.println("爷爷类的无参构造方法执行");
        }
    }

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值