一道面试题到java类加载过程的思考

2020-05-13  本文已影响0人  gigglesoso

运行下面代码执行过程是怎么样的?

public class Test {
    public static void main(String[] args) {
        System.out.println(T.count);
    }
}
class T{
    public static int count = 2;
    public static T t= new T();
    private T(){
        count++;
    }
}

假如调换T中count变量和t变量的顺序呢?

public class Test {
    public static void main(String[] args) {
        System.out.println(T.count);
    }
}
class T{
    public static T t = new T();
    public static int count = 2;
    private T(){
        count++;
    }
}

————————————————————————————————

要搞清楚这两个问题,我们需要知道当我们调用T.count的时候到底发生了什么?

调用T.count时候,其实一个总的过程是加载了T这个的类对象,因为java中类加载使用lazyloading,真正在调用时候才会发生。所以上述过程其实是加载T的类对象,再输出他的变量值的问题。
————————————————————————————————

类加载的过程包含以下三个阶段
上一篇下一篇

猜你喜欢

热点阅读