可能重复:
为什么静态变量被认为是邪恶的?
几年前在大学学习过面向对象编程和设计,我记得讲师对使用静态变量或静态方法的人非常生气,因为他们将静态描述为非常糟糕的设计。
我的理解是这种静态类型的东西,是获得全球“视野”的东西,即它可以被任何东西访问。
我的理解正确吗?是否有关于使用静态的信息使其不好用?有没有办法避免在代码中使用静态变量或方法?
顺便说一句,我知道 main 方法的静态是应用程序成功运行的先决条件。
可能重复:
为什么静态变量被认为是邪恶的?
几年前在大学学习过面向对象编程和设计,我记得讲师对使用静态变量或静态方法的人非常生气,因为他们将静态描述为非常糟糕的设计。
我的理解是这种静态类型的东西,是获得全球“视野”的东西,即它可以被任何东西访问。
我的理解正确吗?是否有关于使用静态的信息使其不好用?有没有办法避免在代码中使用静态变量或方法?
顺便说一句,我知道 main 方法的静态是应用程序成功运行的先决条件。
静态变量或方法没有任何问题。只是对于 OOP,您希望将尽可能多的行为与对象相关联,这意味着使用实例方法和变量。话虽如此,在某些特定情况下静态成员是必需的:构造函数(正如您提到的)和单例模式是很好的例子。
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
静态变量和静态方法是完全不同的东西。
静态变量是不好的,除非它们代表某种“单例”,如果它们代表某种“单例”,那么在 OOP 中最好创建实际的单例类(特别是如果您可以使用枚举单例)。除其他外,静态变量使多线程编程变得困难,即使在单线程编程中也可以做到这一点,您“意外地”需要两个具有静态字段的类实例。
另一方面,静态方法通常很好,只要它们不访问任何静态数据,而只对它们的参数进行操作。当然,如果你注意到你有static void MyStaticUtils.operateOnFoo(Foo foo)
,那么最好有非静态void Foo.operate()
方法。但有时你没有为现有类添加方法的奢侈,并且必须对现有方法返回的实例进行操作,那么静态实用程序方法绝对是不错的选择。