Static Methods and static variables, bad design practise?
Possible Duplicate:
Why are static variables considered evil?
几年前,我在大学里学习过面向对象的编程和设计,我记得讲师对使用静态变量或静态方法的人非常生气,因为他们把静态描述成一个非常糟糕的设计。
我的理解是静态类型的东西,是获得全局"视觉"的东西,也就是说,它可以被任何东西访问。
我的理解正确吗?有没有关于静态的使用的信息会使它不能正常使用?有没有一种方法可以避免在代码中使用静态变量或方法?
顺便说一句,我知道静态主方法是成功运行应用程序的前提。
静态变量或方法没有问题。这只是因为对于OOP,您希望尽可能多地将行为与对象关联起来,这意味着使用实例方法和变量。尽管如此,在某些特定情况下静态成员是必要的:构造函数(如您所提到的)和单例模式是很好的例子。
静态变量和静态方法是完全不同的。
静态变量是坏的,除非它们代表某种类型的"singleton",如果它们代表,那么在OOP中,最好创建实际的singleton类(特别是如果可以使用枚举singleton)。另外,静态变量使多线程编程变得困难,甚至在单线程编程中也能做到这一点,在单线程编程中,您"意外"需要两个带有静态字段的类实例。
另一方面,静态方法一般都很好,只要它们不访问任何静态数据,而是只对它们的参数进行操作。当然,如果你注意到你有
静态主要用于访问类成员而不创建类实例。正如您所知,我们为什么要在运行时编写
它取决于您的要求,即如何使用或说如何使用访问说明符声明类的成员为私有、公共、默认和保护访问级别,而静态的则将其作为静态访问级别。
如果不使用static,则必须将成员声明为public,或者如果继承了类,则也将其设置为protected。与在同一个包中一样,您定义了类,然后只定义了用于继承类的静态类。如果不使用inhert类,则需要创建该类的对象,然后可以访问其中的成员(请注意,它基于访问说明符)。
下面是详细信息的链接
http://xahlee.info/java-a-day/access_specifiers.html
http://www.javabeginner.com/learn-java/introduction-to-java-access-modifiers
使用静态变量的主要合法情况是单例模式,而且没有其他方法可以做到这一点。
单例访问器方法,尤其是使用延迟初始化的访问器方法,需要静态方法。
单身没有什么"坏"的。