zoukankan      html  css  js  c++  java
  • Java 继承关系中初始化顺序

    一、测试代码

    // 父类
    class Father {
        private static Message a = new Message("父类的静态属性");
        private Message b = new Message("父类的非静态属性b");
    
        static {
            new Message("父类的静态代码块");
        }
    
        {
            new Message("父类的非静态代码块");
        }
    
        private Message c = new Message("父类的非静态属性c");
    
        public Father() {
            new Message("父类的构造方法");
        }
    }
    
    // 子类
    class Child extends Father {
        private static Message a = new Message("子类的静态属性");
        private Message b = new Message("子类的非静态属性");
    
        static {
            new Message("子类的静态代码块");
        }
    
        {
            new Message("子类的非静态代码块");
        }
    
        public Child() {
            new Message("子类的构造方法");
        }
    }
    
    // 打印信息的类
    class Message {
        public Message(String message) {
            System.out.println(message);
        }
    }
    
    // 测试类
    public class SpringTest {
        public static void main(String[] args) {
            Child child = new Child();
        }
    }

    二、测试结果

    三、总结

    1、初始化顺序:静态初始化 ----> 父类初始化 ----> 子类初始化

    2、静态成员随着类的加载而加载,优先于对象而存在,所以不管是父类还是子类的静态成员都优先加载

    3、同一个类中静态属性和静态代码块是属于同一级别的,谁在前面就先加载谁

    4、同一个类中非静态属性和非静态代码块也是属于同一级别的,谁在前面就先加载谁,同时它们的优先级都高于构造方法

  • 相关阅读:
    BZOJ3224普通平衡树——旋转treap
    我有一个梦想
    Python自动化测试入门
    Java为何这么难学?
    jmeter正则表达式书写
    fiddler抓包后Jmeter实现登录接口
    JMeter如何使用用户定义的变量
    第一篇博客说明
    React笔记_(5)_react语法4
    React笔记_(4)_react语法3
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/14042236.html
Copyright © 2011-2022 走看看