• Java中类的初始化顺序


    1、静态优先,构造随后;
    2、无论静态还是构造,先父再子
    即: 父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数

    代码演示:

    class Father {
     static {
      System.out.println("父类静态代码块");
     }
    
     {
      System.out.println("父类非静态代码块");
     }
    
     public Father() {
      System.out.println("父类构造函数");
     }
    
    }
    
    public class Son extends Father {
     static {
      System.out.println("子类静态代码块");
     }
    
     {
      System.out.println("子类非静态代码块");
     }
    
     public Son() {
      System.out.println("子类构造函数");
     }
     public static void main(String[] args) {
      Son son = new Son();
     }
    
    }
    

    结果:

    父类静态代码块
    子类静态代码块
    父类非静态代码块
    父类构造函数
    子类非静态代码块
    子类构造函数
    

    原理分析:

    • 为什么静态优先,构造随后
      首先static修饰的成员变量和方法是从属于类的, 而普通变量和方法是从属于对象的,在调用某个类的构造方法之前,应该先加载类信息,包括静态初始化块!之后才能创建对象!

    • 为什么先父再子
      由于子类继承了父类,就拥有了父类的所有属性和方法(除了构造方法),但不一定可以直接访问(私有属性和方法) 子类去创建对象的时候,构造方法第一句总是:super(…)来调用父类对应的构造方法。

    以上内容均来源于牛客网评论区

  • 相关阅读:
    探寻京东云核心竞争力的源泉
    在线公开课 | 教你如何自行搭建一个威胁感知大脑?
    推迟学习系统调用
    linux中未实现的系统调用
    man(2) V
    man(2) W
    图像叠加
    man(2) readv writev
    qt 视频播放
    ffmpeg参数
  • 原文地址:https://www.cnblogs.com/stublog/p/16025745.html
Copyright © 2020-2023  润新知