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

    输出结果为:

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

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

  • 相关阅读:
    Ajax入门
    多线程入门(五)
    多线程入门(四)
    多线程入门(三)
    多线程入门(二)
    多线程入门(一)
    git使用简介
    Windows远程登录到VirtualBox安装的Ubuntu11.10
    阿里面试2(转)
    百度java开发面试题
  • 原文地址:https://www.cnblogs.com/dpains/p/7227906.html
Copyright © 2020-2023  润新知