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'
  • 相关阅读:
    老王python博客
    python中文分词
    python 字典(dict)get方法应用
    python yield和generators(生成器)
    python ASCII返回对应的值(chr)
    python 字符串特点
    python 包的定义,结构,导入过程
    fabric的安装和配置
    python 正则表达式re findall
    python unittest单元测试方法和用例
  • 原文地址:https://www.cnblogs.com/nowl/p/12460749.html
Copyright © 2011-2022 走看看