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

     在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图:

        

    一、单类(无基类)下的初始化顺序:

    public class Parent {

    static String staticStr = "父类静态变量";

    private String str = "父类成员变量";

    static {

    System.out.println(staticStr);

      System.out.println("父类静态初始化块");

    }

    {

    System.out.println(str);

      System.out.println("父类初始化块");

    }

    public Parent() {

      System.out.println("父类构造");

    }

    public static void main(String[] args) {

      new Parent();

         //new Parent();

    }

    }

    输出:父类静态变量

               父类静态初始化块

               父类成员变量

               父类初始化块

               父类构造

                /* 若放开第二行new Parent(),输出结果会增加以下内容:

                父类成员变量

               父类初始化块

               父类构造

                */

    单类顺序:  ①静态(成员,块) > 非静态(成员,块) > 构造

                      ②成员和块的顺序取决于“他们在类中定义时的前后位置,谁靠前谁先被初始化”。

                      ③静态成员或块是属于类的,所以优先初始化,且只会初始化一次。

                      ④构造最后被执行。

    二、继承类的初始化顺序

    class SubClass extends Parent {

    static String staticStr = "子类静态变量";

    private String str = "子类成员变量";

    static {

    System.out.println(staticStr);

      System.out.println("子类静态初始化块");

    }

    {

    System.out.println(str);

      System.out.println("子类初始化块");

    }

    public SubClass() {

      System.out.println("子类构造");

    }

    public static void main(String[] args) {

    System.out.println("子类main方法");

      new SubClass();

    }

    }

    输出:父类静态变量

              父类静态初始化块

              子类静态变量

              子类静态初始化块

              子类main方法

              父类成员变量

              父类初始化块

              父类构造

              子类成员变量

              子类初始化块

              子类构造

    继承类顺序:

                    ①父类静态(成员,块) > 子类静态(成员,块) > 父类非静态(成员,块) > 父类构造 > 子类非静态(成员,块)> 子类构造

                    ②同样的,成员和块的顺序和单类中一样

                    ③先有父才有子,但是子类的静态(成员和块)先于父类的非静态(成员和块),因为静态是属于类的;对于非静态和构造,自然是父类中全部加载完毕,再加载子类。

    关注老姜谈技术,微信号:helojava,或者扫描下面二维码。


    每日一帖,技术鸡汤。

  • 相关阅读:
    线程_Process实例
    线程_multiprocessing异步
    线程_multiprocessing实现文件夹copy器
    线程_GIL最简单的例子
    线程_FIFO队列实现生产者消费者
    线程_apply堵塞式
    正则表达式_合集下(后续还会有补充)
    正则表达式_合集上
    二分法查找
    数据结构_二叉树
  • 原文地址:https://www.cnblogs.com/jiangkuan/p/6025892.html
Copyright © 2011-2022 走看看