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

  • 相关阅读:
    设计模式- 模板方法模式
    什么是Coded UI
    请介绍WCF服务
    我的WCF之旅(1):创建一个简单的WCF程序
    7.3 Models -- Creating And Deleting Records
    7.2 Models -- Defining Models
    7.1 Models -- Introduction
    6.3 Controllers -- Managing Dependencies Between Controllers
    6.2 Controllers -- Representing Multipe Models
    6.1 Controllers -- Introduction
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14637536.html
Copyright © 2011-2022 走看看