几年前我在大学学习过面向对象的编程和设计,我记得讲师对使用静态变量或静态方法的人非常生气,因为他们认为静态是一个非常糟糕的设计。
我的理解是这样的 静态类型的东西是获得全局“视觉”的东西,即它可以被任何东西访问。
我的理解是否正确?是否有关于使用静电的信息,这使得它很难使用?有没有办法避免在代码中使用静态变量或方法?
不过,我知道main方法的静态是应用程序成功运行的先决条件。答案 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的方法,需要静态方法。
单身人士没有什么“坏”。