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

  • 相关阅读:
    VS2005 GridView操作大全(转载)
    架构与模式
    JS全选与取消
    C#查找指定文件夹下指定后缀名的所有文件
    select poll epoll Hello
    scanf() gets() fgets()使用注意事项 Hello
    gtk_init() Hello
    用C实现FFT算法 Hello
    时间相关函数 Hello
    gcc的编译属性和选项 Hello
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14637536.html
Copyright © 2011-2022 走看看