Java 一个类只有一个实例,还是仅仅有一堆静态方法更好?
我一直在使用几种调用方法的方法。最近,我一直在使用一个类的静态实例,我相信这是一个恰当的术语(如果我错了,请纠正我)。哪一个更好(甚至是建议),为什么 第一种方法是简单的静态方法Java 一个类只有一个实例,还是仅仅有一堆静态方法更好?,java,class,methods,static,Java,Class,Methods,Static,我一直在使用几种调用方法的方法。最近,我一直在使用一个类的静态实例,我相信这是一个恰当的术语(如果我错了,请纠正我)。哪一个更好(甚至是建议),为什么 第一种方法是简单的静态方法 static void exampleMethod1(){} static void exampleMethod2(){} 第二种方式(有人说这是一种改进) 你要找的术语是单身 单例上的静态方法和实例方法都是不错的方法,但请注意,静态方法方法无法实现接口,因此如果需要实现接口,请使用单例 例如: public enu
static void exampleMethod1(){}
static void exampleMethod2(){}
第二种方式(有人说这是一种改进)
你要找的术语是单身 单例上的静态方法和实例方法都是不错的方法,但请注意,静态方法方法无法实现接口,因此如果需要实现接口,请使用单例 例如:
public enum HelloWorld implements Runnable {
INSTANCE;
@Override
public void run() {
System.out.println("Hello, world!");
}
}
// ...
new Thread(HelloWorld.INSTANCE).start();
如果您的hello world代码位于静态方法中,它将无法直接实现
Runnable
接口。如果所有方法都是静态的,并且您不需要初始化类或拥有类成员,那么只需创建一个静态实用程序类即可
只有静态函数的静态类就可以了
正如chris在我上面回答的那样,听起来你在寻找一个单例,只有当你的类有非静态方面时才应该使用它,但是你想限制它的实例数量
public static class GeneralFunctions
{
public static class ArrayFunctions
{
public static void OnArray{};
}
public static class PrintingFunctions
{
public static void PrintBuffer(byte[] buffer){};
public static void PrintQword(ulong qword){};
}
}
您可以拥有一个只包含静态方法的类,并且这些方法可以(如果需要)使用类中的静态字段作为其持久数据。或者,您可以使用“单例”类实例对实例方法和实例字段执行大致相同的操作
一般来说,如果您有一个只包含没有状态的方法的类(例如,Math类),那么您应该使这些方法成为静态的,并且不具有/允许实例。但是,如果这些方法必须具有某种共享状态,那么使用某种“单例”实现可能更明智。要创建适当的单例,必须将构造函数设置为私有。静态最终声明确保在第一次加载类时初始化实例。这是在Java中创建单例的最简单方法,但请注意还有其他方法
public class ExampleClass
{
private final static ExampleClass instance = new ExampleClass();
private ExampleClass()
{
// prevents instantiation
}
public static ExampleClass getInstance()
{
return instance;
}
void exampleMethod1()
{
//code
}
void exampleMethod2()
{
//code
}
}
要获取类的实例,请执行以下操作:
ExampleClass exampleClass = ExampleClass.getInstance();
exampleClass.exampleMethod1();
类的静态实例不是正确的表达式。这将描述引用某个实例的类的静态字段。你说的是在类类型上静态调用的方法。谢谢,我不太确定这个术语是什么。“公共静态实例”;这是什么直接或间接的意思。无数据类型:在实例化对象时,在构造函数中指定数据类型。@Jaccob该声明中缺少该类型<代码>公共静态???实例应该是
公共静态ExampleClass实例代码>哈哈,有人告诉我,拥有这样的静态实用程序类是“糟糕”的编程。我从未想过使用枚举来实现它,尽管我确实使用它们来实现Comparator。酷:)@StormeHawke它被称为“enum singleton模式”,在本文的第3项中有描述。这本书很值得一读,我认为每个Java程序员都应该读一读-D@StormeHawke从28:50开始。拥有一个单例从来都不是“明智的”,如果必须的话,这是最后的选择。我认为将它变成一个非静态类可能是一个好主意,即使没有状态,如果可以想象,在将来的某个时候实现可能会更改为一个需要状态的类。然后,如果确实发生了这种情况,您就不必更改使用该类的所有代码。数学课将是一个例子,在这个例子中,不可能想象国家会被需要。但这实际上取决于类代表什么以及其中的方法是用来做什么的,当然,我们不能用ExampleClass
@TomF这样的类来判断,单例有几个优点。例如,您可以很容易地(并且可以配置地)将一个singleton子类化,这对于一个全静态类来说是很尴尬的。(但我确实认为,单身人士往往是首选的,当有很多更好的选择时,但这与静态方法无关。)我目前主要工作在C++嵌入式系统中,所以请相信我,我知道我在一个单身圈的路上。不过,除非你需要单例,否则你不应该使用单例,因为它“容易”或“可读”。@TomF-奇怪的是,我很少需要使用它们。最简单的方法是使用枚举,就像Chris在回答中所做的那样。多线程应用程序无需担心。
ExampleClass exampleClass = ExampleClass.getInstance();
exampleClass.exampleMethod1();