zoukankan      html  css  js  c++  java
  • Java各种成员初始化顺序

    在其他博客看到过这种关于初始化顺序的文章,仔细一想,自己还真的不太清楚具体的顺序是什么样的,搞段代码测试一下:

    class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。

    
    
    public class LoaderOrderParent {
    
        static{
    
            System.out.println("父类--静态代码块");
        }
        {
    
            System.out.println("父类--代码块");
        }
    
        public static String staticStringParent=initStaticStringInParent();
    
        public String stringInParent=initStringInParent();
    
        public LoaderOrderParent(){
    
            System.out.println("父类--构造方法");
        }
    
        public static String initStaticStringInParent(){
    
            System.out.println("父类--初始化静态变量");
            return "initStaticStringInParent";
        }
    
        public String initStringInParent(){
    
            System.out.println("父类--初始化普通变量");
            return "initStringInParent";
        }
    }
    
    
    
    public class LoaderOrderChild extends LoaderOrderParent {
    
        public String stringInChild=initStringInChild();
        public static String staticStringInChild=initStaticStringInChild();
        {
    
            System.out.println("子类--方法块");
        }
        static {
    
            System.out.println("子类--静态方法块");
        }
    
        public LoaderOrderChild(){
    
            System.out.println("子类--构造方法");
        }
    
        public static String initStaticStringInChild(){
    
            System.out.println("子类--初始化静态变量");
            return "staticStringInChild";
        }
    
        public String initStringInChild(){
    
            System.out.println("子类--初始化普通变量");
            return "stringInChild";
        }
    
    
        public static void main(String[] args){
    
            new LoaderOrderChild();
        }
    }

    在子类中,执行main方法,new LoaderOrderChild();

    输出结果为:

    父类--静态代码块
    父类--初始化静态变量
    子类--初始化静态变量
    子类--静态方法块
    父类--代码块
    父类--初始化普通变量
    父类--构造方法
    子类--初始化普通变量
    子类--方法块
    子类--构造方法

    虽然子类的普通代码块写在静态代码块前面,但是还是静态代码库先执行

  • 相关阅读:
    Angularjs中添加ckEditor插件
    Angularjs中添加HighCharts
    ngTbale真分页实现排序、搜索等功能
    移动端小功能杂记(三)
    Html5 history Api简介
    移动端流程页处理
    Html5离线缓存简介
    多Tabs的横向滚动插件(支持Zepto和jQuery)
    flutter从零开始第一篇-环境搭建(Windows)
    vue 父子组件与全局数据传递共享
  • 原文地址:https://www.cnblogs.com/dpains/p/7227906.html
Copyright © 2011-2022 走看看