zoukankan      html  css  js  c++  java
  • java代码块执行顺序

    测试

    代码如下:

    public abstract class ADemo1 {
    
        static { System.out.println("static ADemo1 ~~~");
        }
    
        { System.out.println("ADemo1 ~~~"); }
    
        public ADemo1(){ System.out.println("ADemo1 无参构造"); }
    
        public ADemo1(String str){ System.out.println("ADemo1 有参构造"); }
    }
    
    public abstract class ADemo2 extends ADemo1{
        static { System.out.println("static ADemo2 ~~~"); }
    
        { System.out.println("ADemo2 ~~~"); }
    
        public ADemo2(){ System.out.println("ADemo2 无参构造"); }
    
        public ADemo2(String str){ System.out.println("ADemo2 有参构造"); }
    }
    
    public class ADemo3 extends ADemo2{
        static { System.out.println("static ADemo3 ~~~"); }
    
        { System.out.println("ADemo3 ~~~"); }
    
        public ADemo3(){ System.out.println("ADemo3 无参构造"); }
    
        public ADemo3(String str){ System.out.println("str" + " ADemo3有参构造"); }
    }
    
    public class Demo extends ADemo3{
    
        public Demo(String str){ System.out.println("str" + " Demo有参构造"); }
    
        static { System.out.println("static demo"); }
    
        public Demo(){ System.out.println("demo 无参构造"); }
    
        { System.out.println("Demo"); }
    
        public static void main(String[] args) {
            new Demo();
            System.out.println("==================
    ");
            new Demo("hello");
        }
    }
    

    类的继承层级如下:其中ADemo1和ADemo2为抽象类

    image-20210409145338463

    测试输出结果:

    image-20210409145913974

    修改Demo类的有参构造方法:

        public Demo(String str){ 
            super(str);
            System.out.println("str" + " Demo有参构造");
        }
    

    测试输出结果:

    image-20210409150146677

    结论

    静态代码块只会调用一次

    调用无参构造方法

    image-20210409151143736

    调用有参构造方法

    如果子类有参构造中没有调用父类有参构造:

    image-20210409155359694

    如果子类有参构造中调用父类有参构造:

    image-20210409155428008

  • 相关阅读:
    JVM结构
    redis缓存淘汰策略
    idea常用快捷键
    Spring常用注解
    redis持久化
    crontab定时调度
    redis五种数据类型
    LVM实验报告
    fdisk以及parted分区实验
    fdisk与parted的区别以及parted为何可分128个区
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14637536.html
Copyright © 2011-2022 走看看