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

    输出结果为:

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

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

  • 相关阅读:
    Hibernate学习笔记(一)
    mysql内联接、左联接、右联接
    mysql表数据增删改查、子查询
    mysql建表时候的五种约束
    mysql数据库基本数据类型
    nginx uwsgi flask相关配置
    关于爬虫数据的解析器设计
    Redis 七月小说网的爬虫缓存设计
    MariaDB 数据库迁移
    React Relay 实现
  • 原文地址:https://www.cnblogs.com/dpains/p/7227906.html
Copyright © 2011-2022 走看看