java - 单例类和静态类的区别?

标签 java static singleton

Possible Duplicates:
Difference between static class and singleton pattern?
What is the difference between a Singleton pattern and a static class in Java?

你好 我不清楚单例类和静态类有什么区别? 谁能举例说明一下?

最佳答案

单例类:单例类是每个类加载器只能存在单个实例的类。

静态/帮助类(只有静态字段/方法的类):不存在此类的实例。只有字段和方法可以作为常量或辅助方法直接访问。

以下引用自此blog "Static classes in Java"很好地描述了它。该博客也有解释相同的示例:

单例示例:

public class ClassicSingleton {
    private static ClassicSingleton instance = null;

    private ClassicSingleton() {
        // Exists only to defeat instantiation.
    }

    public static ClassicSingleton getInstance() {
        if (instance == null) {
            instance = new ClassicSingleton();
        }
        return instance;
    }
}

静态类示例:

/**
 * A helper class with useful static utility functions.
 */
public final class ActionHelper {

    /**
     * private constructor to stop people instantiating it.
     */
    private ActionHelper() {
        // this is never run
    }

    /**
     * prints hello world and then the users name
     * 
     * @param users
     *            name
     */
    public static void printHelloWorld(final String name) {
        System.out.println("Hello World its " + name);
    }

}

那么这两个示例有什么区别,为什么我认为第二种解决方案更适合您不想或不需要实例化的类。首先,如果您想创建一个类的一个实例,单例模式非常有用。对于我的助手类,我们真的不想实例化该类的任何副本。您不应该使用 Singleton 类的原因是,对于这个帮助类,我们不使用任何变量。如果单例类包含一组我们只想要一组的变量并且方法使用这些变量但在我们的辅助类中我们不使用除了传入的变量(我们将其设为最终变量)之外的任何变量,那么单例类将很有用.出于这个原因,我不相信我们想要一个单例实例,因为我们不想要任何变量,也不想要任何人实例化这个类。因此,如果您不希望任何人实例化该类,通常是如果您有某种帮助器/实用程序类,那么我将使用我称之为静态类的类,它是一个具有私有(private)构造函数的类,并且仅包含静态方法而没有任何任何变量。

我的回答 here 也引用了相同的答案

关于java - 单例类和静态类的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3714971/

相关文章:

java - MongoDB Java 驱动程序 3.x : How to pass allowDiskUse=true to aggregate() method?

c - 为什么不能在 ubuntu 上链接 64 位静态 libgcc

PHP:在静态变量中引用另一个静态变量

thread-safety - Kotlin 单例线程安全吗?

java - 带有 Spring IOC 的推土机映射器单例实例

java - 将扫描仪输入直接插入数组列表

javascript - 由于 AJAX 加载程序,Selenium 脚本失败

java - 在 Java 1.5 项目中使用 Jmockit 时出现 UnsupportedClassVersionError

c++ - 静态内存中的STL结构 'Losing' 跨线程数据

c++ - 使用 CxxTest 损坏单例数据