zoukankan      html  css  js  c++  java
  • Java中static块、构造块、构造函数的执行顺序

    最近被一个面试题难住了,看来之前对JAVA的执行顺序欠了解。以为原面试题代码:

    public class Example {
        public static void main(String[] args) {
    
            HelloB bb = new HelloB();
        }
    }
    
    class HelloA {
        public HelloA() {
            System.out.println("HelloA");
        }
    
        {
            System.out.println("I'm A class");
        }
        static {
            System.out.println("static A");
        }
    }
    
    class HelloB extends HelloA {
        public HelloB() {
            System.out.println("HelloB");
        }
    
        {
            System.out.println("I'm B class");
        }
        static {
            System.out.println("static B");
        }
    
        public static void main(String[] args) {
            new HelloB();
        }
    }
    View Code

    执行结果是:

    static A
    static B
    I'm A class
    HelloA
    I'm B class
    HelloB

    得出以下总结:
    1. 当调用JAVA子类的无参构造函数时,虽然子类无参构造函数没有显式调用其父类的无参构造函数,但是Java会自动调用其父类的无参构造器 (注:有参构造函数需要显式调用)
    2. JAVA的执行顺序是:父类静态块 -> 子类静态块 -> 父类构造块 -> 父类构造函数 -> 子类构造块 -> 子类构造函数

  • 相关阅读:
    Python 元类
    Rsync 基础配置
    linux shell find
    找最大的目录
    云主机的上下行带宽
    关于c3p0 ResourcePoolException: Attempted to use a closed or broken resource pool
    recover_file
    MegaCli 监控raid状态
    influxdb
    在Ubuntu 16.04如何安装Java使用apt-get的
  • 原文地址:https://www.cnblogs.com/mrhgw/p/13050024.html
Copyright © 2011-2022 走看看