zoukankan      html  css  js  c++  java
  • 静态代码块,非静态代码块,构造器的执行顺序和次数

    package com.Test;
    
    public class Test1 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("------------------第一次实例化对象--------------------");
            Parent parent = new Child();
            System.out.println("——————————————————第二次实例化对象————————————————————");
            parent=new Child();
        }
    }
    
    class Parent {
        public static StaticVarible staticVarible = new StaticVarible("父类-静态变量1");
        public StaticVarible instVarible = new StaticVarible("父类-成员变量1");
    
        static {
            System.out.println("父类-静态块");
        }
    
        {
            System.out.println("父类-初始化块");
        }
    
        public Parent() {
            System.out.println("父类-实例构造函数");
        }
    }
    
    class Child extends Parent {
        public static StaticVarible staticVarible = new StaticVarible("子类-静态变量1");
        public StaticVarible instVarible = new StaticVarible("子类-成员变量1");
    
        static {
            System.out.println("子类-静态块");
        }
    
        public Child() {
            System.out.println("子类-实例构造函数");
        }
    
        {
            System.out.println("子类-初始化块");
        }
    
    }
    
    class StaticVarible {
        public StaticVarible(String info) {
            System.out.println(info);
        }
    }

    第一次实例化对象
    父类-静态变量1
    父类-静态块
    子类-静态变量1
    子类-静态块
    父类-成员变量1
    父类-初始化块
    父类-实例构造函数
    子类-成员变量1
    子类-初始化块
    子类-实例构造函数
    ——————————————————第二次实例化对象————————————————————
    父类-成员变量1
    父类-初始化块
    父类-实例构造函数
    子类-成员变量1
    子类-初始化块
    子类-实例构造函数

    结论:

    从上述结果可以看出,在实例化一个对象时,各部分的加载顺序如下:

    父类静态成员/父类静态初始化块 -> 子类静态成员/子类初始化块 -> 父类成员变量/父类初始化块 -> 父类构造函数 -> 子类成员变量/子类初始化块 -> 子类构造函数

    静态代码块和静态成员只有类首次加载进内存时调用一次,只此一次。

    非静态代码块和成员,每次创建对象时,会在构造函数之前被调用。

    构造函数,每次创建对象时,最后调用。

    创建子类对象时,先创建父类对象,再创建子类对象。

  • 相关阅读:
    Netty3实现服务端和客户端
    Nio实现服务端
    python学习笔记8-邮件模块
    python学习笔记8-异常处理
    python学习笔记8--面向对象编程
    python番外篇--sql注入
    python学习笔记7-网络编程
    python学习笔记7-excel操作
    python学习笔记6--双色球需求实现
    python学习笔记6--操作redis
  • 原文地址:https://www.cnblogs.com/cRaZy-TyKeIo/p/3546396.html
Copyright © 2011-2022 走看看