方法不用静态的不行吗?

方法不用静态的不行吗?

方法不用静态的不行吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
CrazyCodeGirl 2025-11-07 12:14:00

你好同学,在单例模式里,获取实例的方法(如 getInstance())必须声明为静态的(static),否则就无法通过“类名.方法名”的方式访问,也无法保证全局唯一实例。

为什么必须静态?

1. 构造器是私有的

private SingletonOne() { }

构造器被私有化,外部就无法用 new SingletonOne()进行实例化。因此,不能通过对象来调用实例方法,只能通过类来调用静态方法。

2. 静态方法属于类,不依赖对象

静态方法可以在没有创建对象的情况下调用。

如果 getInstance() 不是静态的,你就得先有一个对象才能调用它,但对象又只能通过 getInstance() 获取,这就成了死循环。

如果不用静态,代码如下:

public SingletonOne getInstance() { // 非静态
    return instance;
}

你想调用它,就得这样:

SingletonOne obj = new SingletonOne(); // 构造器私有,编译报错
SingletonOne instance = obj.getInstance(); // 死循环

正确用法就是用静态,如下代码:

SingletonOne instance = SingletonOne.getInstance();

所以,在单例模式中,getInstance() 必须是静态的,因为构造器私有,无法创建对象,只能通过类名调用静态方法来获取唯一实例。希望我的解答能够让同学更好的理解单利模式的饿汉式,祝学习愉快!



Terryguo 2025-11-05 11:05:11

被调用时不会重复创建,在这里也就不会被重复实例化,很有意义。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师