【问题标题】:Static Methods and static variables, bad design practise? [duplicate]静态方法和静态变量,糟糕的设计实践? [复制]
【发布时间】:2012-11-07 09:14:56
【问题描述】:

可能重复:
Why are static variables considered evil?

几年前在大学学习过面向对象编程和设计,我记得讲师们对使用静态变量或静态方法的人非常生气,因为他们将静态描述为非常糟糕的设计。

我的理解是这样的 静态类型的东西是获得全局“视野”的东西,即任何东西都可以访问它。

我的理解正确吗?是否有关于使用静态的信息使其不好用?有没有办法避免在代码中使用静态变量或方法?

顺便说一句,我知道 main 方法的静态是应用程序成功运行的先决条件。

【问题讨论】:

标签: java oop static


【解决方案1】:

静态变量或方法没有错。只是对于 OOP,您希望将尽可能多的行为与对象相关联,这意味着使用实例方法和变量。话虽如此,在某些特定情况下静态成员是必要的:构造函数(正如您提到的)和单例模式就是很好的例子。

【讨论】:

  • 作为一个例子它违反了多态性概念
【解决方案2】:

static 主要用于在不创建类实例的情况下访问类成员。如您所知,为什么我们在运行时编写 public static void main() 只是 bcoz,jvm 可以访问此方法而无需创建类对象并启动您的程序。

这取决于您的要求,即您如何使用或说如何使用访问说明符将类成员声明为私有、公共、默认和保护访问级别,而静态用于将其设为具有访问级别的静态。

如果没有静态,您必须将您的成员声明为公共的,或者如果您继承您的类,那么也将其设为受保护的。就像在同一个包中一样,您定义类然后只是静态的来继承类。对于没有继承类的使用,您需要创建该类的对象,然后您可以访问那里的成员(注意它基于访问说明符)

更多详情请点击下方链接

http://xahlee.info/java-a-day/access_specifiers.html

http://www.javabeginner.com/learn-java/introduction-to-java-access-modifiers

【讨论】:

    【解决方案3】:

    使用静态变量的主要合法案例是singleton pattern

    单例的访问器方法,尤其是使用lazy initialization 的访问器方法,需要静态方法。

    单身并没有什么“不好”的地方。

    【讨论】:

    • 你能澄清一下吗?
    【解决方案4】:

    静态变量和静态方法是完全不同的东西。

    静态变量是不好的,除非它们代表某种“单例”,如果它们代表某种“单例”,那么在 OOP 中最好创建实际的单例类(特别是如果您可以使用枚举单例)。除其他外,静态变量使多线程编程变得困难,即使在单线程编程中也可以做到这一点,您“意外地”需要两个具有静态字段的类实例。

    另一方面,静态方法通常都很好,只要它们不访问任何静态数据,而只对它们的参数进行操作。当然,如果你注意到你有static void MyStaticUtils.operateOnFoo(Foo foo),那么最好有非静态的void Foo.operate() 方法。但有时你没有为现有类添加方法的奢侈,必须对现有方法返回的实例进行操作,那么静态实用程序方法绝对是不错的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多