美文网首页
static变量,static代码块,构造函数,代码块等的加载顺

static变量,static代码块,构造函数,代码块等的加载顺

作者: sendos | 来源:发表于2018-11-15 16:55 被阅读11次
public class Main {
    public Main() {
        System.out.println("construct invoke");  // 执行顺序6
    }
    static int i = 4;  // 执行顺序1
    static {
        i++;
        System.out.println("first static invoke i = " + i);  // 执行顺序2
    }
    private int j = 0;  // new 对象之后才会开始执行  执行顺序4
    {
        System.out.println("匿名代码块执行" + j);  // new 之后才执行  执行顺序5
    }
    static {
        System.out.println("second static invoke");  // 执行顺序3
    }
    static void fun() {
        System.out.println("call static function");  // 只有在调用的时候才会执行
    }
    public static void main(String [] args) {
        new Main();
        Main.fun();
    }
}

运行结果:


image.png
  • 在类加载阶段,先顺序执行static变量的赋值
  • 顺序执行static代码块(static代码块只有在类加载的时候,才会执行,发生在类加载的初始化阶段,putstatic、getstatic、invokestatic、new指令一定会触发初始化阶段)

以下代码块只发生在实例对象时,并且没实例化一次对象,都会执行一轮

  • 先顺序执行内部变量赋值
  • 顺序执行匿名代码块
  • 执行构造函数

静态方法只有在调用的时候,会有执行。

相关文章

网友评论

      本文标题:static变量,static代码块,构造函数,代码块等的加载顺

      本文链接:https://www.haomeiwen.com/subject/mfgyfqtx.html