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_Static Methods_Static Members - Fatal编程技术网

Java 只有静态数据和访问这些数据的方法的类。如何正确地实施?

Java 只有静态数据和访问这些数据的方法的类。如何正确地实施?,java,oop,static,static-methods,static-members,Java,Oop,Static,Static Methods,Static Members,我知道这是个初学者的问题。我对java和编程都是新手 假设我得到一个只有静态数据的类,例如: class Foo { private static int x; } 我希望在不实例化任何对象的情况下使用该类。因此,我希望能够做到: Foo.setX(5); Foo.getX(); 实现这个类的最佳方法是什么,我现在对接口和其他东西有点困惑 谢谢。我认为单身是你想要的: 单身人士类别: public class Singleton { private static final

我知道这是个初学者的问题。我对java和编程都是新手

假设我得到一个只有静态数据的类,例如:

class Foo {
private static int x;  }
我希望在不实例化任何对象的情况下使用该类。因此,我希望能够做到:

Foo.setX(5);
Foo.getX();
实现这个类的最佳方法是什么,我现在对接口和其他东西有点困惑


谢谢。

我认为单身是你想要的:

单身人士类别:

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private int x;

    // Private constructor prevents instantiation from other classes
    private Singleton() {
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

}
以及从代码中的任何位置访问:

int x = Singleton.getInstance().getX();
Singleton.getInstance().setX(10);

我认为单身是你想要的:

单身人士类别:

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private int x;

    // Private constructor prevents instantiation from other classes
    private Singleton() {
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

}
以及从代码中的任何位置访问:

int x = Singleton.getInstance().getX();
Singleton.getInstance().setX(10);

为什么不定义两个修改/返回静态字段的静态方法呢


为什么不定义两个修改/返回静态字段的静态方法呢


您可以随时让静态公共方法获取并设置为执行您想要的操作。但是再看一看,单例模式可能就是您想要的。

您总是可以让静态公共方法获取并设置为执行您想要的操作。但是再看看,单例模式可能就是您想要的。

您可以将
getX
setX
方法定义为静态:

class Foo
{
    private static int x; 

    public static int getX()
    {
        return x;
    }

    public static void setX(int x)
    {
        Foo.x = x;
    }
}
然后,您可以在不实例化任何对象的情况下使用它:

Foo.setX(5);
int val = Foo.getX();
正如其他人所建议的那样,
Singleton
是一种更干净的方法,尽管它不能满足您不实例化任何对象的要求


您可以将
getX
setX
方法定义为静态:

class Foo
{
    private static int x; 

    public static int getX()
    {
        return x;
    }

    public static void setX(int x)
    {
        Foo.x = x;
    }
}
然后,您可以在不实例化任何对象的情况下使用它:

Foo.setX(5);
int val = Foo.getX();
正如其他人所建议的那样,
Singleton
是一种更干净的方法,尽管它不能满足您不实例化任何对象的要求



因为我之前说过:“我想在不实例化任何对象的情况下使用类”,所以在定义静态方法时,不必实例化类来访问该方法。您只需编写Foo.GetX()。@m4design:我编辑了我的答案。请阅读本文以获得概述。因为我之前说过:“我希望在定义静态方法时使用类而不实例化任何对象”,所以不必实例化类来访问该方法。您只需编写Foo.GetX()。@m4design:我编辑了我的答案。请阅读本文以获得概述。@sbi 100%同意,单身是邪恶的!如果它是邪恶的,有更好的设计吗?或者我应该改变我的设计来解决我的问题?如果能看到完整的代码来给你提供建议,那就太好了。但是我觉得依赖注入会阻止你使用singleton。。。只是一种感觉;-)顺便说一句,如果你想得到详细的答案,这可能是一个完全不同的问题,所以…@sbi 100%同意,单身是邪恶的!如果它是邪恶的,有更好的设计吗?或者我应该改变我的设计来解决我的问题?如果能看到完整的代码来给你提供建议,那就太好了。但是我觉得依赖注入会阻止你使用singleton。。。只是一种感觉;-)顺便说一下,如果你想详细回答,这可能是一个完全不同的问题……我认为这可能是C++的工作,但不是java的(如果有人能遵守)。我在Java中尝试过这一点,它告诉我(非静态不能从静态上下文引用)。甚至认为x实际上是静态的!!这在Java中是可行的,试试看!你会看到的。。。顺便说一句,我建议不要使用单例,在使用前要三思而后行,你确定你需要静态的吗?这是一个错误。这个.x=x;不行。它必须是Foo.x=x;但如果您需要状态,您应该真正创建一个对象。Foo-Foo=new-Foo()有什么问题;foo.setX(1);我认为这可能在C++中工作,但是在java中(如果有人能遵守)。我在Java中尝试过这一点,它告诉我(非静态不能从静态上下文引用)。甚至认为x实际上是静态的!!这在Java中是可行的,试试看!你会看到的。。。顺便说一句,我建议不要使用单例,在使用前要三思而后行,你确定你需要静态的吗?这是一个错误。这个.x=x;不行。它必须是Foo.x=x;但如果您需要状态,您应该真正创建一个对象。Foo-Foo=new-Foo()有什么问题;foo.setX(1);