java类的初始化顺序

今天介绍下java类的初始化顺序。

这里写了个类方便更直观的表达(代码太长没人看)

public class InitSeqence {
    public static String staticField="静态属性";
    public String field="非静态属性";
    
    static{
        System.out.println(staticField);
        System.out.println("静态块");
    }
    
    {
        System.out.println(field);
        System.out.println("非静态块");
    }
    
    public InitSeqence(){
        System.out.println("InitSeqence构造函数");
    }
    
    public static void main(String[] args) {
        InitSeqence initSeqence=new InitSeqence();
    }
}

运行结果

静态属性
静态块
非静态属性
非静态块
InitSeqence构造函数

从结果我们可以看出

  1. 初始化static修饰的属性和块(不含方法),在类中定义的顺序,由上而下。
  2. 普通属性和块(不含方法),在类中定义的顺序,由上而下。
  3. 构造函数

由staitc修饰代码会被放在静态代码区,这些属性和方法独立该类的任何对象,不依赖任何实例,被所有实例所共享。当JVM加载类时会先加载这些代码(常见于考试...),当两个类出现继承关系是,先加载父类的静态,然后子类静态,再是父类普通属性、方法、构造函数,然后是子类的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   最近在看回顾Java基础的时候,发现看似很简单的类初始化的顺序却并不是那么简单(往往越是简单的东西反而越容易出...
    BrightLoong阅读 1,505评论 0 2
  • 这票文章主要想来说一下Java类各部分(非静态字段初始化、非静态块、静态字段初始化、静态块、构造函数)的执行顺序。...
    第四单元阅读 429评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,838评论 18 399
  • 父类 static 块 1 执行 父类 静态成员staticSam1初始化 父类 静态成员staticSam2初始...
    YCix阅读 1,359评论 0 0
  • UML(Unified Modelling Language,统一建模语言)图的基本含义: 每个类用一个方框表示,...
    笑笑学生阅读 185评论 0 0