静态方法和静态变量,糟糕的设计实践?

时间:2012-11-19 12:37:03

标签: java oop static

  

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

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

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

我的理解是否正确?是否有关于使用静电的信息,这使得它很难使用?有没有办法避免在代码中使用静态变量或方法?

不过,我知道main方法的静态是应用程序成功运行的先决条件。

4 个答案:

答案 0 :(得分:2)

静态变量或方法没有任何问题。只是通过OOP,您希望将尽可能多的行为与对象关联起来,这意味着使用实例方法和变量。话虽如此,有些特殊情况需要静态成员:构造函数(如您所述)和Singleton模式是很好的例子。

答案 1 :(得分:1)

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

根据您的要求,您使用或说出如何使用访问说明符作为私有,公共,默认和保护访问级别来使用或说明如何声明类成员,而静态用于将其设置为具有访问级别的静态。

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

以下链接了解更多详情

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

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

答案 2 :(得分:1)

静态变量和静态方法完全不同。

静态变量很糟糕,除非它们代表" singleton"某种,如果他们这样做,那么在OOP中创建实际的单例类更好(特别是如果你可以使用枚举单例)。除此之外,静态变量使得多线程编程变得困难,并且即使在单线程编程中也可以做到这一点,在这种情况下,你会出乎意料地“#34;需要两个带静态字段的类实例。

另一方面,静态方法通常很好,只要它们不访问任何静态数据,但只对它们的参数进行操作。当然,如果您发现自己有static void MyStaticUtils.operateOnFoo(Foo foo),那么使用非静态void Foo.operate()方法要好得多。但有时你不必为现有类添加方法,并且必须对现有方法返回的实例进行操作,然后静态实用方法绝对是不错的选择。

答案 3 :(得分:0)

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

没有其他办法可以做到这一点。

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

单身人士没有什么“坏”。