单例模式中的唯一实例为什么一定要设置为静态的 您所在的位置:网站首页 static成员变量必须为public 单例模式中的唯一实例为什么一定要设置为静态的

单例模式中的唯一实例为什么一定要设置为静态的

2023-09-19 14:38| 来源: 网络整理| 查看: 265

单例模式中的唯一实例为什么一定要设置为静态的

这里以懒汉式的单例模式为例

public class Emperor { private Emperor(){} private static Emperor instance; public static Emperor getInstance(){ if(instance==null) instance=new Emperor(); return instance; } }

由上述代码可见,其唯一实例和getInsance()方法都被设置为静态类型。 为什么一定要将其设置为静态的,这就要从单例模式出现的目的说起,单例模式是为了让类的使用者只会创建出一个类的实例,要想达到这样的目的: 首先,类的构造方法肯定要对其他类隐藏起来 其次,自己要创建一个实例供其他类来使用 最后,要提供一个方法给其他类来访问这个实例

看到这你可能觉得那么直接用public *** getInstance()不就好了,为什么一定要设置为静态的方法? 要想访问一个类中的方法有两个方式

new一个对应类的对象,在通过对象.方法()的方式来调用成员方法通过类名.方法名()这样来调用对应的类方法

由于单例模式中为了避免外界直接使用构造方法创建实例对象,将构造方法隐藏了起来。此时第一种方法显然无法实现,只有通过第二种方法来获取实例,所以单例模式中的getInstance()方法必须被定义为类方法,即必须加上static。 而根据Java语法的要求,在static的环境中是不允许访问非static的成员变量的(这里的原因,我的理解是由于静态方法(类方法)是跟随类加载一起被加载进来的,而普通的成员变量是在实例化对象的时候才随之产生的,如果在静态方法中访问了普通的成员变量那么就是在访问一个不存在的变量,会导致错误),所以对应的实例对象也必须被定义为类属性。 第一篇文章,多多指正



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有