初始化大乱斗(java初始化)

初始化大乱斗(java初始化),第1张

初始化大乱斗(java初始化
public class InitializeDemo {
    private static int k = 1;
    private static InitializeDemo t1 = new InitializeDemo("t1");
    private static InitializeDemo t2 = new InitializeDemo("t2");
    private static int i = print("i");
    private static int n = 99;

    {
        print("初始化块");
        j=100;
    }
    public InitializeDemo(String str) {
        System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
        ++i;
        ++n;

    }
    static {
        print("静态块");
        n=100;
    }
    private int j = print("j");
    public static int print(String str) {
        System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
        ++n;
        return ++i;
    }

    public static void main(String[] args) {
    System.out.println("main方法开始执行");
        InitializeDemo test = new InitializeDemo("test");
    }

}

输出结果:
1:初始化块 i=0 n=0
2:j i=1 n=1
3:t1 i=2 n=2
4:初始化块 i=3 n=3
5:j i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
main方法开始执行
9:初始化块 i=8 n=100
10:j i=9 n=101
11:test i=10 n=102

过程详解:
先加载main所在类的静态代码,从上至下,遇到new InitializeDemo(“t1”);执行非静态的代码块,初始化成员变量(按照代码顺序)和构造方法,下面的new InitializeDemo(“t2”)同理,这样就从打印了1-6。
然后初始化静态变量i,执行print(“i”);方法,打印7。
然后执行静态块,此时main所在类的静态资源加载完毕,输出main方法开始执行,接下来初始化一个对象(9-11同1-3),只执行非静态的初始化工作。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5708240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存