zoukankan      html  css  js  c++  java
  • java程序初始化顺序

     使用场景:  在java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,

    才会调用对象所在类的构造函数创建对象

         初始化的原则

       (1)静态对象优先于非静态对象初始化,静态对象只能初始化一次,但非静态对象可以初始化多次。

       (2)超类优先于派生类初始化。

      (3)按照成员变量定义的顺序来进行初始化,即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造器)被调用前初始化。

    package test;
    /*java程序初始化的顺序:超类静态变量 超类静态代码块 子类静态变量 子类静态代码块 
     *  超类非静态变量 超类非静态代码块 超类构造函数  子类非静态代码块  子类非静态代码块
     *  子类构造函数*/
    
    class Base {    
        static {
            System.out.println("父类静态块");//(1)
        }
        {
            System.out.println("父类块");//(3)
        }
    
        public Base() {
            System.out.println("父类构造方法");//(4)
        }
        
        public static void A() {
            int a;//静态方法中不能有静态常量,因为static方法共享一块内存区域,主要用于累加,如果静态常量的话就不能累加了,就冲突了
            System.out.println("父类普通静态方法");
        }
        
    }
    
    public class Derived extends Base {
        static int a=1;    
        static int b=2;
        static {
            System.out.println("子类静态块");//(2)
        }
        {
            System.out.println("子类块");//(5)
        }
    
        public Derived() {
            System.out.println("子类构造器");//(6)
        }
    
        public static void main(String[] args) {    
            Base.A();        
            new Derived();
            
        }
    }
    /*
     *public static void main(String[] args) {        
            new Derived();
            Base.A();        
        }
    父类静态块
    子类静态块
    父类块
    父类构造方法
    子类块
    子类构造器
    父类普通静态方法
    */
    
    /*
     *public static void main(String[] args) {    
            Base.A();        
            new Derived();
            
        }
     父类静态块
    子类静态块
    父类普通静态方法
    父类块
    父类构造方法
    子类块
    子类构造器
     * */

          

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    Typescript类、命名空间、模块
    TypeScript 基础类型、变量声明、函数、联合类型、接口
    JS中的单线程与多线程、事件循环与消息队列、宏任务与微任务
    wangEditor上传本地视频
    java版excel转pdf,word转pdf
    idea2019.3 没有 Autoscroll from Source
    mysql 实现类似oracle函数bitand功能
    spring boot 配置文件动态更新原理 以Nacos为例
    spring boot 发布自动生成svn版本号
    spring boot JPA 数据库连接池释放
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/9320772.html
Copyright © 2011-2022 走看看