Java静态变量中创建本对象,为何不会造成死循环?

今天在写单例模式模式中,突然想到一个问题,为啥静态变量中创建自己一个对象,不会造成对象创建死循环,仔细一想,恍然大悟.

饿汉式单例代码

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {
        System.out.println("初始化");
    };

    public static Singleton getInstance() {
        return INSTANCE;
    }

}

首先,要明白的是静态代码只会在类加载的时候初始化一次,是对所有类共享的,因此,所以当对象创建了一次之后,静态代码就不再初始化,静态变量中就不会重复创建对象了.相反的,如果以下情况就会出死循环问题了

public class Singleton {

    private Singleton instance = new Singleton();

    private Singleton() {
        System.out.println("初始化");
    };

    public static void main(String[] args) {
        new Singleton();
    }

}

成员变量不是对所有类共享的,因此在创建对象初始化过程中,成员变量需要创建一个新的对象,此时这个新的对象中的成员变量又需要创建一个新的对象,新的对象又要创建一个新的对象,如此反复,就会造成死循环,报StackOverflowError

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值