1

可能重复:
为什么静态变量被认为是邪恶的?

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

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

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

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

4

4 回答 4

2

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

于 2012-11-19T12:47:28.317 回答
1

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

于 2012-11-19T12:47:31.433 回答
1

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

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

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

于 2012-11-19T12:58:27.110 回答
0

使用静态变量的主要合法案例,并且没有其他方法可以做到这一点,是单例模式

单例的访问器方法,尤其是使用延迟初始化的访问器方法,需要静态方法。

单身人士没有什么“不好”的。

于 2012-11-19T12:54:23.647 回答