当前位置: 首页 > 面试题库 >

为什么使用单例而不是静态方法?

贡斌
2023-03-14
问题内容

对于有关辅助程序/实用程序类的这些简单问题,我从未找到好的答案:

为什么我要创建一个单例(无状态)而不使用静态方法?

如果对象没有状态,为什么需要一个对象实例?


问题答案:

通常,单例用于向应用程序引入某种 全局状态 。(说实话,通常不是很必要,但这是另一个话题。)

但是,在一些极端情况下,甚至 无状态 单例也可能有用:

  • 您希望在可预见的将来用状态扩展它。
  • 由于某些特定的 技术 原因,您需要一个 对象实例 。示例:C#或Java 语句的同步对象。 __
    lock``synchronized

  • 您需要继承,即您希望能够使用相同的接口但使用不同的实现轻松地用另一个替换单例。
    示例:Toolkit.getDefaultToolkit()Java中的方法将返回一个单例,其确切类型取决于系统。

  • 您想要一个哨兵值的 引用相等 。示例:在C#中。
    DBNull.Value



 类似资料:
  • 我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,

  • 问题内容: 我是一个相对较新的QA工程师,致力于学习Selenium(使用Java),并且我想使用页面对象为页面建模。 目前,我的页面对象类是静态变量(用于定位页面元素的对象)和静态方法(用于获取By对象并执行页面功能)的集合。这对我来说似乎是最简单的方法,因为我的方法不需要依赖任何实例变量,而只需依赖定位符。 我只是在测试代码中根据需要调用这些方法。 但是,我读到的有关页面对象的所有内容都涉及实

  • 伙计们,我有一个简单但令人讨厌的问题。据我所知,基本上意味着,对于该类的每个实例,这个方法将是相同的,如果我们改变它,这将改变该类的每个实例,它也被称为类方法。那么,如果我有一个类,它实现了某种格式的方法,让我们说: 为什么不能设置为静态?因为该类的每个实例的格式都是相同的。。。?

  • 关于静态和动态之间的区别,我仍然有点困惑。据我所知,动态使用对象,而静态使用类型,动态在运行时解析,而静态在编译时解析。所以this.lastName.compare(s1.last名称)不应该使用动态绑定吗? 钥匙compareTo(list[position-1])使用动态绑定 (this . last name . compare to(S1 . last name))为什么使用静态绑定?

  • 据我所知,通常应该使用类的引用来调用静态方法,或者如果它位于静态方法或静态块中,则可以不引用直接调用它。 但当从子类静态块调用静态方法时,这是否适用? 为什么它允许这样的事情,因为静态方法不是继承的,所以应该只允许使用父类名对吗? 为什么我的子类静态块可以在没有引用或类名的情况下调用父类静态方法?

  • 根据我的理解,如果子例程不作用于类的实例(其作用仅限于显式输入/输出),则它是;如果子例程作用于类的实例,则它是(它可能会对实例产生副作用,使其不纯)。 关于这个话题,这里有一个很好的讨论。请注意,根据接受答案的定义,静态实际上应该是一个函数,因为实例从不隐式传递,而且它不能访问任何实例的成员。 不过,考虑到这一点,静态实际上不应该是函数吗? 我想确保我使用了正确的措辞。 有人能澄清一下吗?