• Java类的成员初始化顺序


    Java类的成员初始化顺序

    2017-06-01

    代码:

    public class InitializeSequence
     {
        public static void main(String[] args)
        {
            new Son();
        }
    }
    
    class Father {
        static {
            System.out.println("1 父类静态代码块初始化");
        }
        {
            System.out.println("5 父类代码块初始化");
        }
    
        private static String s = print("2 父类静态实例");
        private String s1=print("6 父类实例");
    
        public static String print(String msg) {
            System.out.println(msg);
            return "父类静态成员变量的初始化";
        }
    
        public Father() {
            System.out.println("7 父类无参构造函数初始化");
        }
    }
    
    class Son extends Father {
        static {
            System.out.println("3 子类静态代码块初始化");
        }
        {
            System.out.println("8 子类代码块初始化");
        }
    
        private static String s = print("4 子类静态实例");
        private String s1=print("9 子类实例");
    
        public static String print(String msg) {
            System.out.println(msg);
            return "子类静态成员变量的初始化";
        }
    
        public Son() {
            System.out.println("10子类构造函数初始化");
        }
    }

    结果:

    1 父类静态代码块初始化
    2 父类静态实例
    3 子类静态代码块初始化
    4 子类静态实例
    5 父类代码块初始化
    6 父类实例
    7 父类无参构造函数初始化
    8 子类代码块初始化
    9 子类实例
    10子类构造函数初始化

    总结:

    1 先静态成员,后实例成员
    2 先父类,后子类
    3 先实例成员,后构造函数

    对比:c#类的成员初始化顺序

  • 相关阅读:
    矩阵旋转
    clang-format 规范及 Visual Stido Code 自定义格式化代码风格
    Windows 安装 MinGW-w64
    Linux配置Visual Stdio Code
    Ubuntu中安装eclipse
    Ubuntu安装JDK11
    Ubuntu安装搜狗输入法
    C/C++算术运算(类型使用)的注意事项
    闰年判断与日期计算
    查看变量类型
  • 原文地址:https://www.cnblogs.com/Ming8006/p/6928514.html
Copyright © 2020-2023  润新知