zoukankan      html  css  js  c++  java
  • 子类与父类中静态代码块、匿名代码块、构造器的执行顺序

    先看结论,执行顺序为
    父类静态代码块-->>子类静态代码块-->>父类匿名代码块-->>父类构造器-->>子类匿名代码块-->>子类构造器
    其中静态代码块在初始化时会被调用,但是匿名代码块与构造器只有在创建对象时才会调用。
    上代码:
    父类

    public class InitSuper {
    	static {
    		System.out.println("InitSuper static{}");
    	}
    
    	{
    		System.out.println("InitSuper {}");
    	}
    
    	public InitSuper() {
    		super();
    		System.out.println("InitSuper Init()");
    	}
    }
    

    子类

    public class InitSub extends InitSuper{
    	
    	static {
    		System.out.println("InitSub static{}");
    	}
    	
    	{
    		System.out.println("InitSub {}");
    	}
    	
    	public InitSub() {
    		super();
    		System.out.println("InitSub Init()");
    	}
    	
    	public static void main(String[] args) {
    		new InitSub();
    	}
    }
    

    执行结果:

    InitSuper static{}
    InitSub static{}
    InitSuper {}
    InitSuper Init()
    InitSub {}
    InitSub Init()
    

    注意:把子类main方法中的new InitSub()删掉后在运行,只会调用静态代码块,因为执行main方法只触发初始化动作,但没有创建对象。

  • 相关阅读:
    面试题 16.07. 最大数值
    461. 汉明距离
    1290. 二进制链表转整数
    1486. 数组异或操作
    1480. 一维数组的动态和
    面试题 17.04. 消失的数字
    626. 换座位
    125. 验证回文串
    530. 二叉搜索树的最小绝对差
    ASP.NET页面之间传递值的几种方式
  • 原文地址:https://www.cnblogs.com/minghaiJ/p/11319961.html
Copyright © 2011-2022 走看看