zoukankan      html  css  js  c++  java
  • Java类的初始化顺序

    public class ClassInitOrderTest {
    
        public static void main(String[] args) {
            new B();
        }
    }
    
    class T {
        T(int i, String flag) {
            System.out.println(flag + "调用T(" + i + ")");
        }
    }
    
    class A {
        static T t1 = new T(1, "基类静态字段");
        T t5 = new T(5, "基类类字段");
    
        static {
            new T(2, "基类静态代码块");
        }
    
        A() {
            new T(6, "基类构造函数");
        }
    }
    
    class B extends A {
        static T t3 = new T(3, "子类静态字段");
        T t7 = new T(7, "基类类字段");
    
        static {
            new T(4, "子类静态代码块");
        }
    
        B() {
            new T(8, "子类构造函数");
        }
    }

    基类静态字段调用T(1)
    基类静态代码块调用T(2)
    子类静态字段调用T(3)
    子类静态代码块调用T(4)
    基类类字段调用T(5)
    基类构造函数调用T(6)
    基类类字段调用T(7)
    子类构造函数调用T(8)

    假设更改调用(不用new B ,而直接调用静态字段(方法))

    public class ClassInitOrderTest {
    
        public static void main(String[] args) {
            //new B();
            T t3 = B.t3;
    
        }
    }

    基类静态字段调用T(1)
    基类静态代码块调用T(2)
    子类静态字段调用T(3)
    子类静态代码块调用T(4)

    假设再更改调用,仅调用基类的字段(方法)

    public class ClassInitOrderTest {
    
        public static void main(String[] args) {
            //new B();
            //T t3 = B.t3;
            T t1 = A.t1;
        }
    }

    基类静态字段调用T(1)
    基类静态代码块调用T(2)

  • 相关阅读:
    DOM对象和jQuery对象的区别
    scrollLeft,scrollWidth,clientWidth,offsetWidth详解
    js数组去重
    变量和作用域的小结
    JS练习题之字符串一
    css实现布局
    将字符串或者数字转化成英文格式输出
    css元素居中实现方法
    不同的函数调用模式
    一个apply的实例
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8939868.html
Copyright © 2011-2022 走看看