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

    View Code
     1 package com.Test;
     2 
     3 public class Test1 {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         System.out.println("------------------第一次实例化对象--------------------");
    11         Parent parent = new Child();
    12         System.out.println("——————————————————第二次实例化对象————————————————————");
    13         parent=new Child();
    14     }
    15 }
    16 
    17 class Parent {
    18     public static StaticVarible staticVarible = new StaticVarible("父类-静态变量1");
    19     public StaticVarible instVarible = new StaticVarible("父类-成员变量1");
    20 
    21     static {
    22         System.out.println("父类-静态块");
    23     }
    24 
    25     {
    26         System.out.println("父类-初始化块");
    27     }
    28 
    29     public Parent() {
    30         System.out.println("父类-实例构造函数");
    31     }
    32 }
    33 
    34 class Child extends Parent {
    35     public static StaticVarible staticVarible = new StaticVarible("子类-静态变量1");
    36     public StaticVarible instVarible = new StaticVarible("子类-成员变量1");
    37 
    38     static {
    39         System.out.println("子类-静态块");
    40     }
    41 
    42     public Child() {
    43         System.out.println("子类-实例构造函数");
    44     }
    45 
    46     {
    47         System.out.println("子类-初始化块");
    48     }
    49 
    50 }
    51 
    52 class StaticVarible {
    53     public StaticVarible(String info) {
    54         System.out.println(info);
    55     }
    56 }

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

    结论:

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

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

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

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

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

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

  • 相关阅读:
    js 仿 asp中的 asc 和 chr 函数的代码
    escape,encodeURI,encodeURIComponent
    从项目从SVN上check下来,用idea打开后,idea没有SVN的工具栏解决方法
    idea中导入SVN的项目时,连接失败,报“Cannot run program "svn"
    spring基础----事件(Applicaition Event)
    idea在导入项目时遇到的问题
    Spring基础---bean的初始化和销毁
    spring基础----EL和资源调用
    spring基础----Bean的Scope
    面试题-------------js三种信息框
  • 原文地址:https://www.cnblogs.com/gexiaoshan/p/3070750.html
Copyright © 2011-2022 走看看