zoukankan      html  css  js  c++  java
  • 初始化顺序-陈远波

    在我们每次new一个对象的时候,对象都会被初始化,但是他们初始化的顺序又是怎样呢?现在我以存在继承与不存在继承的代码给大家演示。

    一、对于没有继承的初始化的顺序(静态变量,静态块、构造函数、变量)

    package test;
    //没有继承情况下的代码
    public class test5 {
        //静态变量
        private static String st="静态变量";
        //静态块
        static{
            System.out.println(st);
            System.out.println("静态块");
        }
        //
        {
            System.out.println("块");
        }
        //常量
        private String st2="变量";
        //构造函数
        test5(){
            System.out.println(st2);
            System.out.println("构造函数");
        }
        public static void main(String[] args) {
            new test5();
        }    
    }

    该代码的输出结果为:

    静态变量
    静态块

    变量
    构造函数

    由此可得出没有继承下的初始化顺序。

    二、当存在继承的时候的初始化如下:

    package test;
    //子类代码
    public class test6 extends test5 {
        //静态变量
        private static String st="子类静态变量";
        //静态块
        static{
            System.out.println(st);
            System.out.println("子类静态块");
        }
        //
        {
            System.out.println("子类块");
        }
        //常量
        private String st2="子类变量";
        //构造函数
        test6(){
            System.out.println(st2);
            System.out.println("子类构造函数");
        }
        public static void main(String[] args) {
            new test6();
        }    
        
    }
    //父类代码
    package test;
    //没有继承情况下的代码
    public class test5 {
        //静态变量
        private static String st="父类静态变量";
        //静态块
        static{
            System.out.println(st);
            System.out.println("父类静态块");
        }
        //
        {
            System.out.println("父类块");
        }
        //常量
        private String st2="父类变量";
        //构造函数
        test5(){
            System.out.println(st2);
            System.out.println("父类构造函数");
        }
    }

    输出打印的结果为:

    父类静态变量
    父类静态块
    子类静态变量
    子类静态块
    父类块
    父类变量
    父类构造函数
    子类块
    子类变量
    子类构造函数

      从而从我打印的语句上就很明显的得出存在继承时的初始化顺序。

      以上是我这讲的主要内容,若以上知识点讲解的不够仔细的请各位大神多多包涵和指正,需要学习更多关于软件知识的博友可以关注后续博客

  • 相关阅读:
    [ML] the notes
    [Java] 在 jar 文件中读取 resources 目录下的文件
    [LeetCode] 53. Maximum Subarray 解题思路
    [git] git 分支管理和工作流程
    debug实战:Unmanaged High Memory非托管高内存
    batch insert 1 million datas into mysql
    nuget的小Tips
    debug实战:进程Hang+High CPU
    debug实战:COM组件GetToSTA导致高内存+GC被阻塞
    svn cleanup failed问题解决
  • 原文地址:https://www.cnblogs.com/chenyuanbo/p/7471110.html
Copyright © 2011-2022 走看看