• java类初始化顺序


    一个类中包含如下几类东西,他们前后是有顺序关系的

    1. 静态属性:static 开头定义的属性
    2. 静态方法块: static {} 圈起来的方法块
    3. 普通属性: 未带static定义的属性
    4. 普通方法块: {} 圈起来的方法块
    5. 构造函数: 类名相同的方法
    6. 方法: 普通方法

    实例代码:

    public class LifeCycle {
        // 静态属性
        private static String staticField = getStaticField();
        // 静态方法块
        static {
            System.out.println(staticField);
            System.out.println("静态方法块初始化");
            System.out.println("Static Patch Initial");
        }
        // 普通属性
        private String field = getField();
        // 普通方法块
        {
            System.out.println(field);
            System.out.println("普通方法块初始化");
            System.out.println("Field Patch Initial");
        }
        // 构造函数
        public LifeCycle() {
            System.out.println("构造函数初始化");
            System.out.println("Structure Initial ");
        }
    
        public static String getStaticField() {
            String statiFiled = "Static Field Initial";
            System.out.println("静态属性初始化");
            return statiFiled;
        }
    
        public static String getField() {
            String filed = "Field Initial";
            System.out.println("普通属性初始化");
            return filed;
        }   
        // 主函数
        public static void main(String[] argc) {
            new LifeCycle();
        }
    }

    执行结果:

    静态属性初始化
    Static Field Initial
    静态方法块初始化
    Static Patch Initial
    普通属性初始化
    Field Initial
    普通方法块初始化
    Field Patch Initial
    构造函数初始化
    Structure Initial 

    可以得出一个java类中初始化顺序:静态变量 > 静态代码块 > 普通变量 > 普通代码块 > 构造函数

    总结:包含父子类和接口类

    普通类:
    • 静态变量
    • 静态代码块
    • 普通变量
    • 普通代码块
    • 构造函数
    继承的子类:
    • 父类静态变量
    • 父类静态代码块
    • 子类静态变量
    • 子类静态代码块
    • 父类普通变量
    • 父类普通代码块
    • 父类构造函数
    • 子类普通变量
    • 子类普通代码块
    • 子类构造函数
    抽象的实现子类: 接口 - 抽象类 - 实现类
    • 接口静态变量
    • 抽象类静态变量
    • 抽象类静态代码块
    • 实现类静态变量
    • 实现类静态代码块
    • 抽象类普通变量
    • 抽象类普通代码块
    • 抽象类构造函数
    • 实现类普通变量
    • 实现类普通代码块
    • 实现类构造函数
    接口注意:
    • 声明的变量都是静态变量并且是final的,所以子类无法修改,并且是固定值不会因为实例而变化
    • 接口中能有静态方法,不能有普通方法,普通方法需要用defalut添加默认实现
    • 接口中的变量必须实例化
    • 接口中没有静态代码块、普通变量、普通代码块、构造函数
  • 相关阅读:
    python基础——返回函数
    python基础——sorted()函数
    python基础——filter函数
    python基础——map/reduce
    python基础——高阶函数
    python基础——迭代器
    python——生成器
    轻量级文本编辑器,Notepad最佳替代品:Notepad++
    python网络编程
    如何检测远程主机上的某个端口是否开启?
  • 原文地址:https://www.cnblogs.com/liuqing576598117/p/11164144.html
Copyright © 2020-2023  润新知