• 类初始化顺序执行结果


     以下程序运行结果是:

    class Y {
        public Y() {
            System.out.println("Y的构造方法");
        }
    
        X x = new X();
        {
            System.out.println("Y的构造代码块");
        }
    
        static {
            System.out.println("Y类的静态代码块初始化");
        }
        static int i = 11;
        static {
            i = 22;
            System.out.println("Y类的静态代码块初始化,且静态变量i的值是:" + i);
        }
    }
    
    class X {
        public X() {
            System.out.println("X的构造方法");
        }
    
        {
            System.out.println("X的构造代码块");
        }
        static {
            System.out.println("X类的静态代码块初始化");
        }
        static int i = 1;
        static {
            i = 2;
            System.out.println("X类的静态代码块初始化,且静态变量i的值是:" + i);
        }
    }
    
    public class Z extends Y {
    
        public static void main(String[] args) {
            new Z();
        }
    
        public Z() {
            System.out.println("Z的构造方法");
        }
    
        X x = new X();
        {
            System.out.println("Z的构造代码块");
        }
        static {
            System.out.println("Z类的静态代码块初始化");
        }
        static int i = 111;
        static {
            i = 222;
            System.out.println("Z类的静态代码块初始化,且静态变量i的值是:" + i);
        }
    }

    输出结果:

    Y类的静态代码块初始化
    Y类的静态代码块初始化,且静态变量i的值是:22
    Z类的静态代码块初始化
    Z类的静态代码块初始化,且静态变量i的值是:222
    X类的静态代码块初始化
    X类的静态代码块初始化,且静态变量i的值是:2
    X的构造代码块
    X的构造方法
    Y的构造代码块
    Y的构造方法
    X的构造代码块
    X的构造方法
    Z的构造代码块
    Z的构造方法

    初始化过程: 
    1. 初始化父类中的静态成员变量和静态代码块(静态成员变量和静态代码块两者按在类中声明的先后顺序顺序执行) ; 
    2. 初始化子类中的静态成员变量和静态代码块(静态成员变量和静态代码块两者按在类中声明的先后顺序顺序执行) ; 
    3.初始化父类的普通成员变量和代码块,再执行父类的构造方法(其中被执行的父类构造方法和子类构造方法参数数量类型一致,普通成员变量和代码块两者按在类中声明的先后顺序顺序执行),;
    4.初始化子类的普通成员变量和代码块,再执行子类的构造方法(普通成员变量和代码块两者按在类中声明的先后顺序顺序执行); 
     
    另一个静态类初始化顺序题:http://www.cnblogs.com/SaraMoring/p/5846610.html
  • 相关阅读:
    linux NFS 的安装准备
    linux Sersync 参数说明
    linux测试 Sersync 是否正常
    linux开启 Sersync 守护进程进行数据同步
    linux 配置 Sersync
    Sersync 上配置 Sersync 服务
    linux Sersync 上配置客户端
    PowerDesigner一些小技巧
    C# System.Attribute(验证类)
    C#:实体类中做数据验证
  • 原文地址:https://www.cnblogs.com/SaraMoring/p/5878638.html
Copyright © 2020-2023  润新知