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();

    输出结果为:

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

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

  • 相关阅读:
    EL表达式
    单例模式
    标准标签JSTL
    五大常用算法之三:贪心算法
    python字符串处理
    判断视图存不存在
    判断插入的数据在表中存不存在
    sql因为发现对象名称 'dbo.Ct2' 和索引名称 'PK_Ct2' 有重复的键,所以ALTER TABLE ALTER COLUMN 。。。 失败。
    C# MD5算法 16 32 大小写
    制作VS2022中文离线安装包
  • 原文地址:https://www.cnblogs.com/dpains/p/7227906.html
Copyright © 2011-2022 走看看