zoukankan      html  css  js  c++  java
  • java 静态资源,非静态资源,父类子类,构造方法之间的初始化循序

    java面试经常被问静态资源,非静态资源,父类子类,构造方法之间的执行顺序。下面添加两个类做个测试

    class Parent {
        // 静态变量
        public static String p_StaticField = "父类--静态变量";
        // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例)
    
        //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化
        public String p_Field = "父类--变量";
        // 静态初始化块
        static {
            System.out.println(p_StaticField);
            System.out.println("父类--静态初始化块");
        }
        // 初始化块
        {
            System.out.println(p_Field);
            System.out.println("父类--初始化块");
        }
    
        // 构造器
        public Parent() {
            System.out.println("父类--构造器");
        }
    }
    public class SubClass extends Parent {
        // 静态变量
        public static String s_StaticField = "子类--静态变量";
        // 变量
        public String s_Field = "子类--变量";
        // 静态初始化块
        static {
            System.out.println(s_StaticField);
            System.out.println("子类--静态初始化块");
        }
        // 初始化块
        {
            System.out.println(s_Field);
            System.out.println("子类--初始化块");
        }
    
        // 构造器
        public SubClass() {
            //super();
            System.out.println("子类--构造器");
        }
    
    }
     // 程序入口
        public static void main(String[] args) {
            System.out.println("*************in main***************");
            new SubClass();
            System.out.println("*************second subClass***************");
            new SubClass();
        }

    两次初始化子类SubClass结果如下,验证了类的初始化循序的同时可以得出静态资源只会在类的第一次初始化加载的结论。

    Connected to the target VM, address: '127.0.0.1:11839', transport: 'socket'
    父类--静态变量
    父类--静态初始化块
    子类--静态变量
    子类--静态初始化块
    *************in main***************
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器
    *************second subClass***************
    父类--变量
    父类--初始化块
    父类--构造器
    子类--变量
    子类--初始化块
    子类--构造器
    Disconnected from the target VM, address: '127.0.0.1:11839', transport: 'socket'
  • 相关阅读:
    bash脚本编程之数组和字符串处理
    Linux启动流程简介以及各启动阶段失败的恢复方法
    Linux路由表的重要性以及配置
    Linux终端和伪终端简述
    Linux九阴真经之无影剑残卷9(Shell脚本编程进阶)
    Linux九阴真经之无影剑残卷8(计划任务)
    Linux九阴真经之无影剑残卷7(进程管理)
    Linux九阴真经之无影剑残卷5(Linux静态路由的实现)
    Linux九阴真经之无影剑残卷4(创建虚拟内存--swap)
    Linux九阴真经之无影剑残卷3(将home目录搬到新分区)
  • 原文地址:https://www.cnblogs.com/nowl/p/12460749.html
Copyright © 2011-2022 走看看