静态块main方法构造块构造方法的执行顺序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态块main方法构造块构造方法的执行顺序相关的知识,希望对你有一定的参考价值。

在牛客网做题,遇到关于静态块、main方法、构造块、构造方法的执行顺序的问题,添加该随笔记之。

题目是写出如下java代码执行后所打印的顺序:

 1 public class B
 2 {
 3     public static B t1 = new B();
 4     public static B t2 = new B();
 5     {
 6         System.out.println("构造块");
 7     }
 8     static
 9     {
10         System.out.println("静态块");
11     }
12     public static void main(String[] args)
13     {
14         B t = new B();
15     }
16 }

 

该题重点:

  1. 静态块(以static开头的部分)在JVM加载该class时只执行一次。
  2. 在一个类中,静态块和静态属性是优先级别相同的,所以按先后顺序执行。

所以JVM在加载这个类时,首先因为静态块和静态属性优先级别相同,所以按先后顺序是new两个B对象赋予t1和t2, 所以会先打印两次"构造块",紧接着执行静态块,打印"静态块",最后执行静态的main方法,main方法中再次new了一个B对象,所以再次打印"构造块"。

所以该问题的答案为:构造块 构造块 静态块 构造块。

 

以上是关于静态块main方法构造块构造方法的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

10代码块构造代码块静态代码块及main方法之间的关系

关于静态块静态属性构造块构造方法的执行顺序

静态代码块-普通代码块-构造代码块(好多图系列)

Java构造块,静态代码块,构造方法执行顺序

静态代码块构造代码块构造函数以及Java类初始化顺序

静态代码块静态变量构造方法及构造块执行顺序