zoukankan      html  css  js  c++  java
  • 构造方法、静态代码块、动态代码块运行顺序

    超类:

    public class A {
        public A() {
            System.out.println("A 类构造方法执行");
        }
        {System.out.println("A 类动态代码块执行");}
        static {System.out.println("A 类静态代码块执行");}
        
    }

    子类:

    public class B extends A{
        public B() {
            System.out.println("B 类构造方法执行");
        }
        {System.out.println("B 类动态代码块执行");}
        static {System.out.println("B 类静态代码块执行");}
        
        public static void main(String[] args) {
            System.out.println("start");
            new B();
            System.out.println("end");
        }
        /*
         * A 类静态代码块执行
         * B 类静态代码块执行
         * start
         * A 类动态代码块执行
         * A 类构造方法执行
         * B 类动态代码块执行
         * B 类构造方法执行
         * end
         */
    }

    运行结果分析:

    1、加载main方法所在的B类,但B类继承了A类,所以在加载B类前先加载A类

    2、加载B类

    3、运行main方法,输出start字符串

    4、调用构造方法创建B类的对象,但因为B类有父类,所以先调用父类A类的构造方法,但在调用A类的构造方法前要先调用A类的动态方法

    5、调用父类的构造方法

    6、调用子类的动态方法

    7、调用子类的构造方法

    8、输出end字符串

    
    
  • 相关阅读:
    批量修改文件
    mysql-5.5.32-linux2.6-x86_64.tar.gz 二进制源码定制安装MySQL服务器
    源码搭建nginx服务器
    Python--安装
    k8s-修改线程数
    容器卡在terminate状态无法删除
    扩/
    磁盘分区+挂载
    499
    清理磁盘
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10109903.html
Copyright © 2011-2022 走看看