美文网首页
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