Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以在没有对象的情况下调用公共静态类名变量吗_Java_Oop_Static - Fatal编程技术网

Java 可以在没有对象的情况下调用公共静态类名变量吗

Java 可以在没有对象的情况下调用公共静态类名变量吗,java,oop,static,Java,Oop,Static,我的问题是变量mInstance是否可以无对象调用?如果否,那么上述语句的意义是什么?关键字static标识无需构造实例即可访问的类元素。您可以使用类名作为限定符来访问它们 在这种情况下,您可以编写StateCacheManager。minInstanceminInstance是类StateCacheManager的对象。此类中只有一个对象 下面应该有一个初始化minInstance的getInstance方法 public class StateCacheManager { publi

我的问题是变量
mInstance
是否可以无对象调用?如果否,那么上述语句的意义是什么?

关键字
static
标识无需构造实例即可访问的类元素。您可以使用类名作为限定符来访问它们


在这种情况下,您可以编写
StateCacheManager。minInstance
minInstance
是类
StateCacheManager
的对象。此类中只有一个对象

下面应该有一个初始化
minInstance
getInstance
方法

public class StateCacheManager {
    public static StateCacheManager mInstance;
}
这就是你使用它的方式

public class StateCacheManager {
    public static StateCacheManager mInstance;

    public StateCacheManager getInstance(){
        if(mInstance == null){
            mInstance = new StateCacheManager();
        }
        return mInstance;
    }
}
该类使用一个名为

的模式。如果某个内容(方法、字段、内部类等)使用静态进行了修改,则可以使用其名称和类名对其进行访问。后缀

因此,您的
mInstance
变量可以如下访问:

StateCacheManager object = StateCacheManager.getInstance();
如您所见,我没有创建任何对象来访问它,因此您的第一个问题的答案是“是”

但是,您可能应该使
mInstance
变量
private
并添加一个getter:

StateCacheManager.mInstance
这是为了防止代码的其他用户或昏昏欲睡的您意外地将
mInstance
设置为您不想要的其他内容

这称为单例模式。当您只希望一个类的一个实例存在时,可以使用它

public static StateCacheManager mInstance = new StateCacheManager();
public StateCacheManager getInstance() { return mInstance; }